我需要在c#应用程序中运行* .msi文件。安装在没有UI的情况下运行,必须无人值守。有没有办法避免UAC弹出窗口?
答案 0 :(得分:1)
某处必须有提升提示,但您可以将UAC提示推迟到C#启动器。它启动,获得UAC提升,如果你然后启动MSI安装作为CreateProcess()启动(或只是调用MsiInstallProduct),MSI也将被提升。
答案 1 :(得分:1)
在过去,我创建的解决方案可以做到:
1)安装放置应用程序和以SYSTEM身份运行的Windows服务。
2)应用程序检查webservice以获取新版本并下载到临时目录。
3)应用程序通知服务MSI存在于临时目录中。
4)服务"祝福" MSI通过执行msiexec / jm foo.msi / qn(已发布/已分配)
5)服务通知应用程序现在信任MSI。
6)应用程序在没有UAC提示的情况下执行MSI的安装。 msiexec / i foo.msi / qn RESTARTAPP = 1
此模式要求MSI在自定义操作计划/安全沙箱方面完全符合要求。它还建议应用程序一启动MSI即可退出,并使用RESTARTAPP进行自定义操作以重新启动应用程序,从而为其提供无缝的用户体验。
我已经考虑过将其作为FOSS项目/模式,但确保不被滥用的安全考虑因素超出了我想要处理的范围。