我需要从我的C#应用程序中运行 *.msi文件。安装在没有UI的情况下运行,并且必须无人看管。有没有办法避免使用UAC弹出窗口?
过去,我创建了解决类似:
的解决方案1)安装列表应用程序和作为系统运行的Windows服务。
2)应用程序检查新版本的Web服务并下载到临时目录。
3)应用程序通知服务,MSI存在于临时目录中。
4)通过执行msiexec/jm foo.msi/qn(已发布/分配)
来服务"祝福" MSI5)服务通知应用程序现在信任MSI。
6)应用程序在没有UAC提示的情况下执行MSI的安装。msiexec/i foo.msi/qn restartapp = 1
此模式要求MSI在自定义操作计划/安全沙箱方面完全合规。还建议应用程序启动MSI后立即退出,以避免使用RestartApp的自定义操作,以重新启动应用程序,以赋予其无缝的用户体验。
我已经考虑过将此作为foss项目/模式,但是确保其滥用的安全考虑因素超出了我想要处理的范围。
某个地方必须有一个高程提示,但是您可以将UAC提示推迟到C#启动器。它启动,获得UAC高程,如果您启动MSI安装,则以createProcess()启动(或仅致电MSIInstallProduct)启动MSI也将被提升。