我已经使用 NSIS 编写了一个安装程序,我需要它在 C:/Program Files/App Name/等标准位置安装一些文件(DLL 等)。我还需要在当前用户的应用程序数据目录中安装文件。问题是,当用户不是 Vista 上的管理员时,我需要提升权限,这样做时环境变量会发生变化,因此当前用户现在似乎是管理员用户,我最终安装在管理员用户的目录中,而不是实际用户。启动安装程序时必须提升权限,这样我就无法获取用户名然后提升权限。当我以管理员身份运行安装程序时,是否有一些合理的方法来确定实际用户是谁?
编辑: 不幸的是,在第一次运行时复制数据不是一种选择。如果没有我正在写入用户目录的内容,该应用程序将无法运行,因为它是一个 MS Word 模板。如果没有模板,我的东西将无法运行,所以我必须在安装时编写模板,并且 Word 要求模板位于用户的 AppData 目录中。
最佳答案
我所有的 NSIS 安装程序都使用这个 UAC 插件: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
关于windows - 以管理员身份运行时获取当前登录的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/439932/