我有一个批处理文件,需要在我的NSIS安装程序中运行。它只是使用NET USE Z安装网络驱动器:\ server \ folder。安装程序似乎工作正常,cmd已启动,并且命令输出什至一切都很好1,但驱动器实际上并未映射
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命令,但得到的结果相同。
蝙蝠的内容如下:
NET USE Z: /d
NET USE Z: \\server\folder
pause
我在做什么错?我还能尝试什么?如果有帮助,可以在Win10 Home版本上测试安装程序。 预先感谢。
答案 0 :(得分:0)
映射的驱动器为not shared across UAC boundaries。
适用的解决方案/解决方法:
如果不需要管理员权限来安装应用程序,则可以在脚本中使用RequestExecutionLevel User
属性。
使用UNC路径(\\server\folder
)
如果要安装应用程序,则该应用程序可以在启动时设置映射。
使用ShellExecAsUser plug-in在Explorer.exe的上下文中执行批处理文件
答案 1 :(得分:0)
Anders的答案很好用,可以弄清楚问题出在哪里,在我的上下文中,我无法使用1-3个选项,所以我开始做4个,这使我想到了use explorer to run as current user,这为我提供了一个更简单的解决方案
Exec '"$WINDIR\explorer.exe" "$INSTDIR\network.bat"'
再指出一点,如果安装程序未升级,则此逻辑无关紧要,因为这样您就可以运行Exec
,它与您的进程具有相同的高度。