Windows服务通过msiexec安装应用程序。该应用已安装,但未在“卸载程序”列表中列出。为什么?

问题描述 投票:0回答:1

我将Windows服务作为LocalSystem帐户运行。服务使用以下参数调用msiexec:

string commandLineArguments = "/package C:\\install.msi /quiet /norestart ";
start.Arguments = (commandLineArguments);

msiexec返回Success并将文件移动到“C:\ Program Files”,但该应用程序未列在“卸载程序”列表中,因此,当我手动运行安装程序时,没有选项可以修复或删除,但是再次安装该软件。为什么?

我理解这可能是因为服务在系统上下文而不是用户上下文中运行。我如何指示MSI为当前用户执行安装?

如何卸载服务安装的软件?

c# windows-services msiexec
1个回答
0
投票

当作为LocalSystem运行的Windows服务安装软件时,它将安装在系统上下文中,如注释中提到的montonero。如果要安装的MSI文件的属性InstallScope设置为perUser,或者根本没有设置InstallScope属性(默认为perUser),则卸载列表中将不会显示已安装的软件(谢谢Damien_The_Unbeliever)。

我通过为服务提供两个MSI文件来测试它。一个将InstallScope设置为perUser,另一个设置为perMachine。卸载列表中只能显示perMachine安装。

将ALLUSERS和MSIINSTALLPERUSER属性传递给MSIEXEC并未覆盖MSI文件中设置的属性。

© www.soinside.com 2019 - 2024. All rights reserved.