我已经使用 NSIS 编写了一个安装程序,我需要它在标准位置(如 C:/Program Files/App Name/)安装一些文件(DLL 等)。我还需要在当前用户的应用程序数据目录中安装文件。问题是,当用户不是 Vista 上的管理员时,我需要提升权限,这样做时环境变量会发生变化,因此当前用户现在看起来是管理员用户,我最终会安装在管理员用户的目录中,而不是安装在实际用户。启动安装程序时必须提升权限,因此我无法获取用户名然后提升权限。当我以管理员身份运行安装程序时,是否有一些合理的方法可以确定实际用户是谁?
编辑:
不幸的是,不能在第一次运行时复制数据。如果没有我写入用户目录的内容,该应用程序将无法运行,因为它是 MS Word 模板。如果没有模板,我的东西就无法运行,因此我必须在安装时编写模板,并且 Word 要求模板位于用户的 AppData 目录中。
我所有的 NSIS 安装程序都使用这个 UAC 插件:http://nsis.sourceforge.net/UAC_plug-in http://nsis.sourceforge.net/UAC_plug-in.
启动安装程序后,您可以立即提升为管理员。这会生成安装程序的第二个实例来完成所有工作。但是您可以调用将作为启动安装程序的用户在原始进程中运行的代码段。
所以你可以有一个安装程序部分,如下所示:
Section "Install My Program" SecMain
...
# Install files to common folders
...
!insertmacro UAC.CallFunctionAsUser CopyUserWordTemplate
...
SectionEnd
Function CopyUserWordTemplate
SetOutPath $LOCALAPPDATA
File "MyWordTemplate.dot"
FunctionEnd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)