0

我在 VS2010 中使用 Visual Studio 部署项目来安装/升级我的应用程序,在 Windows 2003 及更早版本上,它似乎拒绝在尝试升级之前停止服务。因此,安装完成后需要重新启动。这是我在旧服务下运行的 msiexec 日志的一个片段,program.exe我正在尝试安装program.exe作为升级的一部分:

MSI (s) (70:64) [12:00:34:448]: Note: 1: 2727 2:  
MSI (s) (70:64) [12:00:34:682]: 1 application(s) had been reported to have files in use.
Info 1603. The file C:\Program Files\company\program.exe is being held in use by the following process: Name: program, Id: 712, Window Title: '(not determined yet)'.  Close that application and retry.
MSI (c) (60:BC) [12:00:34:682]: File In Use: -program- Window could not be found.  Process ID: 712
MSI (c) (60:BC) [12:00:34:682]: No window with title could be found for FilesInUse
MSI (s) (70:64) [12:00:34:682]: Note: 1: 2727 2:  
MSI (s) (70:64) [12:00:34:682]: Doing action: InstallInitialize
Action ended 12:00:34: InstallValidate. Return value 1.

重新启动时,软件似乎已安装,但之前使用的文件未重新安装,并且该服务尚未安装。我放在桌面上的快捷方式充当广告快捷方式 - 双击它将强制 MSI 看到安装不完整并成功修复。

但是,有些用户可能会在没有重新登录(例如 Web 服务器)的情况下进行此升级,我想:

  1. 无需重新启动即可完成安装,或者
  2. 在用户登录之前重新启动并自动完成安装。

这是我尝试过的:

  1. 运行msiexec /i <pkg.msi> /norestart- 这无济于事,如果我在重新启动之前尝试使用快捷方式,它会尝试修复安装并失败。
  2. 通过设置属性禁用广告快捷方式DISABLEADVTSHORTCUTS=1- 这也不起作用,因为目标打开但安装仍未完成,因此无法正常运行。msiexec /f <pkg.msi>仍然可以用于修复安装。
  3. RunOnce在注册表中添加一个密钥以HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce调用修复操作以完成安装 - 这似乎没有运行,但如果我在命令行运行它就可以了,所以我不确定这里的问题是什么。我使用安装程序添加到 RunServicesOnce 的字符串的值为[SystemFolder]\msiexec.exe /f [ProductCode] /qn,这似乎可以正确评估为C:\Windows\system32\msiexec.exe /f {my code} /qn
  4. 使用 Orca 编辑 .msi 以停止服务(通过 ServiceControl 表)以使该文件未在使用中 - 这不起作用,因为它似乎在评估该文件是否之后才停止该服务举行。

我想我迷路了,我希望我错过了一些明显的东西。让我直截了当。提前致谢!

4

0 回答 0