【问题标题】:Close a Winforms opened by a web service vb .NET关闭由 Web 服务 vb .NET 打开的 Winforms
【发布时间】:2016-10-24 19:25:29
【问题描述】:

所以我在这个 Web 服务中确实有 1 行代码,它应该启动一个可以完成大量工作的桌面应用程序。我选择了桌面应用程序,因为这项工作可能需要 20 多个小时,如果我只选择一个 Web 服务,应用程序池回收计划可能会给我带来一个曲线球。

这是我的网络服务

Process.Start("C:\ReTransPrograms\RateAnalytics\AnalyticsBatchRateDesktop.exe", arguments)

在桌面应用程序(winforms)中工作完成后,在后台worker完成事件中,我试过了...

Application.Exit()

和..

me.close()

当我在工作完成后检查任务管理器时,应用程序仍在运行。我错过了什么吗?权限?安全吗?

当我在本地运行桌面应用程序时,它会在完成后正常关闭。

AppPool 正在作为 LocalSystem 运行。

【问题讨论】:

  • 应用程序池非常受限于 Web 服务运行的目录。因此,如果您的应用程序正在写入文件夹或注册表,它可能会卡住。使用 sysinternal 进程应用程序诊断
  • 最好创建一个 Windows 服务来进行处理,并通过某种方式查询它以获取关于它已经走了多远/预期剩余时间的某种度量标准。然后,您可以创建某种方式为 Windows 服务提供工作。
  • 我想到了那个 Andrew,但我需要从 Web 服务启动的这个程序的多个实例
  • 只写入 SQL 数据库。我确实确保它具有对 SQL 数据库的权限。整个应用程序运行良好,但完成后不会关闭。
  • @TeddyHiggins Windows 服务可以为每个任务实例启动一个新线程(或任务)。

标签: .net vb.net winforms web-services


【解决方案1】:

跟踪进程 ID 并在关闭时终止它。

Private Sub Main()

    ProcessID = Process.Start("C:\ReTransPrograms\RateAnalytics\AnalyticsBatchRateDesktop.exe", arguments).ID

End Sub

什么时候结束通话:

System.Diagnostics.Process.GetProcessById(ProcessID).Kill()

【讨论】:

  • 计算机重用 processID 的可能性有多大?
  • 进程 ID 会在进程关闭后立即回收。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2013-01-21
  • 2015-12-03
  • 2011-12-30
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多