![在 Vista 中提升 Windows 安装程序](https://linux22.com/image/481267/%E5%9C%A8%20Vista%20%E4%B8%AD%E6%8F%90%E5%8D%87%20Windows%20%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F.png)
Vista 要求安装驱动程序或其他系统项目的安装程序具有提升权限。Pointsec 的其中一个安装程序存在一个问题,即安装程序本身不请求提升权限,因此必须事先授予其提升权限。
当在多台禁用 UAC 的机器上安装此软件时,安装软件然后重新启用 UAC 非常繁琐。最好有一种可以解决 UAC 问题的方法。
安装程序是网络共享上的 MSI 包。共享中还包含安装程序应该在安装过程中查找和使用的安装配置文件。此程序在没有 UAC 的情况下运行良好,但我们无法在有 UAC 的情况下运行此程序。
我的主要问题是,当提升进程时,它似乎丢失了工作目录。因此,虽然具有正确参数和网络共享作为工作目录的 msiexec 快捷方式可以工作(即启动但由于没有提升而出错),但以管理员身份运行此快捷方式会抱怨找不到 msi 包。进程监视器显示 msiexec 正在尝试从 Windows\System32 中查找包。指定包的完整 UNC 路径会启动安装程序,但无法找到配置文件。那么,提升不要求提升的 Windows 安装程序的正确方法是什么?
答案1
基本上,你的安装程序设计得很差。
您可以尝试将属性表中的 ALLUSERS 属性设置为 1(使用 Orca,在Windows 安装程序 SDK),这将强制对每台机器进行安装。
在这种情况下,安装程序将在安装过程中请求升高(UAC + MSI 的工作方式如下),你应该会没事的。
答案2
帖子为什么当我提升命令提示符时我的起始目录被忽略?Raymond Chen 博客上的内容可能与此相关。
我还知道一些提升启发法非常简单,例如,如果文件名为“setup”或“install”,它将请求提升。目前我找不到这个的来源。
虽然这不是一个技术性很强的答案,但也许会有用。
答案3
一种方法是运行提升权限的命令提示符,在其中更改工作目录,然后从那里运行安装程序。从提升权限的 cmd.exe 启动的任何程序本身都是提升权限的。