windows - 以管理员身份运行时获取当前登录的用户

标签 windows installation nsis

我已经使用 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/

相关文章:

installation - 如何使用 NSIS 制作更新安装程序?

Windows 内核条件断点未评估

.net - 如何测量用于 .NET 远程处理的 IP 端口的输入/输出字节数?

C# - 将大型 (150MB) 文本文件读入富文本框

windows - 使用 Inno Setup 安装时应用程序不工作

installation - NSIS 脚本是用什么语言编写的?

linux - 将流量重定向到请求特定网页的另一台本地计算机

python - 为 numpy 安装 lapack

android - 从本地文件或 Google Play 安装时如何将参数传递给我的应用程序?

nsis - NSIS 脚本中的默认单选按钮选择