nsis 安装执行 bat 但什么都不做

nsis install executing bat but doing nothing

我有一个批处理文件需要 运行 在我的 NSIS 安装程序中。它只是使用 NET USE Z: \server\folder 安装一个网络驱动器。安装程序似乎工作正常,cmd 已启动,命令甚至输出一切正常 1,但实际上并未映射驱动器

image with commands output

nsis 部分是

Section ""      

    ;Install path
    SetOutPath $INSTDIR
    ;the bat file
    File network.bat

    ;execute bat
    Exec '"$INSTDIR\network.bat"'

SectionEnd

如果我手动执行 bat,驱动器将得到完美映射。我也尝试使用 nsExec::ExecToLog '"C:\Windows\System32\net.exe" use z: \server\folder'Exec "$SYSDIR\Net.exe use z: \server\folder"ExecWait '"cmd.exe" /C net use z: \server\folder' 直接执行 net 命令,但我得到了相同的结果。

bat内容如下:

NET USE Z: /d
NET USE Z: \server\folder
pause

我做错了什么?我还能尝试什么?如果有帮助,我将在 Win10 家庭版上测试安装程序。 提前致谢。

映射的驱动器是 not shared across UAC boundaries

适用solutions/workarounds:

  • 如果您不需要管理员权限来安装您的应用程序,您可以在脚本中使用 RequestExecutionLevel User 属性。

  • 使用 UNC 路径 (\server\folder)

  • 如果您安装的是应用程序,应用程序可以在启动时设置映射。

  • 使用ShellExecAsUser plug-in在Explorer.exe

  • 的上下文中执行批处理文件

Anders 的回答非常有效,让我明白了问题出在哪里,在我的上下文中,我不能使用 1-3 个选项,所以我开始做 4 个,它引导我到这个 use explorer to run as current user 它给了我一个更简单的解决方案。

Exec '"$WINDIR\explorer.exe" "$INSTDIR\network.bat"'

再指出一件事,如果安装程序未提升,则此逻辑不相关,因为那样您就可以 运行 Exec ,这将与您的进程具有相同的提升。