这让我在过去两天疯狂。我正在尝试为我们的Windows服务做一个非常简单的更新程序。这个想法如下:
值得注意的是:安装程序是应用程序的一部分,因此它也会在此过程中被删除/重新安装。
问题:在卸载应用程序后,updater进程会立即停止。
首先,我认为如果exe被删除或者其调用者(windows服务)被杀死,更新器将被终止是有意义的。但是:如果服务以管理员而不是LocalSystem运行,那么一切都运行良好!为什么?我无法解决这个问题。
启动更新程序的Windows服务中的代码:
Dim tProcess As New Process
tProcess.StartInfo.FileName = "ServiceUpdater.exe"
tProcess.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory
tProcess.Start()
在ServiceUpdater.exe中,卸载并重新安装服务的代码:
LogWindowsEvent("Now uninstalling.", Nothing, EventLogEntryType.Information)
Uninstall()
LogWindowsEvent("Uninstalled. Now installing.", Nothing, EventLogEntryType.Information)
Install()
LogWindowsEvent("Installed.", Nothing, EventLogEntryType.Information)
如果重要,请卸载功能:
Private Sub Uninstall()
Process.Start("msiexec.exe", "/x{" & "7E59BCD2-0DDC-4653-9AFF-15126A5C811E" & "} /quiet").WaitForExit()
End Sub
这里发生了什么?
谢谢!
答案 0 :(得分:0)
问题可能与删除特定服务/文件夹中的文件所需的ADMIN RIGHTS有关。
尼古拉斯,我想如果你改变更新的逻辑,你的问题应该以任何方式解决。
更新不得卸载服务,但要将其停止并将其替换为新模块。
为此,您必须调用另一个应用程序,它将提供以下操作:停止服务,将新模块复制到其上,重新启动服务。
答案 1 :(得分:0)
我通过将应用程序文件复制到临时文件夹并从该文件夹运行ServiceUpdater来使其工作。显然,更新程序在exe文件被删除时(由LocalSystem运行时)停止,所以这让它运行完成。然后我清除临时文件夹。
这并不能解释为什么更新程序在由LocalSystem运行而不是由管理员运行时删除exe时停止 - 但它现在对我来说已经足够好了。