2017-07-31 34 views
0

在NSIS中我想执行一个cmd /批处理文件,该文件仅为没有管理权限的本地用户创建桌面快捷方式。NSIS - 当RequestExecutionLevel管理员不够时,如何将管理员级别继承到ExecShell?

问题是,如果cmd以管理员身份运行,并且在NSIS中尽管RequestExecutionLevel adminExecShell没有继承足够的特权,但因为我收到错误消息,主cmd命令(query.exe) “查询无法找到”。如果没有管理员权限运行cmd,就会发生这种情况

有没有人知道我在执行cmd文件时做错了什么?或者,有没有人知道比cmd文件更好的方式来为用户的桌面创建快捷方式?

感谢您的帮助提前。

这里的CMD文件:

for /f "tokens=1 delims=> " %%a in ('query user ^| findstr /C:"console"') do SET USERNAME=%%a 
mklink "C:\users\%USERNAME%\Desktop\7Zip Filemanager" "%programfiles%\7-zip\7zFM.exe" 

这是我的NSIS文件:

;------------------------------------ 
; Creates desktop shortcuts for the local user instead 
; for that user that runs this installer (admin). 
; ($DESKTOP references to the user that runs this installer) 
;------------------------------------ 

;------------------------------------ 
;Includes 
!include "MUI.nsh" 
!include "LogicLib.nsh" 

!define MUI_ABORTWARNING # This will warn the user if he exits from the installer. 

;------------------------------------ 
;Pages of installer 
!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. 
!insertmacro MUI_PAGE_INSTFILES # Installing page. 
!insertmacro MUI_PAGE_FINISH # Finished installation page. 

;------------------------------------ 
;CRC check 
CRCCheck On 

;------------------------------------ 
;Language 
!insertmacro MUI_LANGUAGE "English" 

;------------------------------------ 
;Execution level 
RequestExecutionLevel admin 

;------------------------------------ 
;Check string length 
!define STRING_LENGTH ${NSIS_MAX_STRLEN} 

;------------------------------------ 
;Define the source files for the installer 
!define MUI_PRODUCT "SHORTCUTS TEST" #Name of application 
!define MUI_FILE_SHORTCUTS_CMD "shortcuts.cmd" #Source of further installation files 

!define CMD_SHORTCUTS "$INSTDIR\${MUI_FILE_SHORTCUTS_CMD}" 

;------------------------------------ 
;Define the destinations 
Name "${MUI_PRODUCT}" # Name of the installer (usually the name of the application to install). 
OutFile "${MUI_PRODUCT} Installer.exe" # Name of the installer's file. 
InstallDir "C:\Test\${MUI_PRODUCT}" # Default installing folder ($PROGRAMFILES is Program Files folder). 
ShowInstDetails show # This will always show the installation details. 

;------------------------------------ 
;Installer section 
Section "Install" 

    ;Create directories: 
    CreateDirectory $INSTDIR 

    ;Add files 
    SetOutPath $INSTDIR 
    File "${MUI_FILE_SHORTCUTS_CMD}" #Move file 

    ;Create shortcuts at user desktop: 
    ;(cmd file needs to be run as administrator, 
    ; otherwise the shortcut is created in the wrong desktop.) 
    ExecShell "open" '${CMD_SHORTCUTS}' ${SW_SHOW} 

SectionEnd 

;eof 

回答

0

我不认为query.exe存在于每个版本的Windows,可能只在Windows Server和Pro SKU。即使它存在于任何地方都是错误的,用户可以更改桌面文件夹的路径和/或名称,甚至可能不在配置文件目录中。

这不是1995年了,如果要安装到的%ProgramFiles%和写入到HKEY_LOCAL_MACHINE那么你正在做一台机器/“所有用户”安装,你应该使用SetShellVarContext All使$Desktop解析为共享桌面文件夹。

mklink创建一个符号链接,但大多数安装程序应该创建一个.lnk快捷方式,您可以在NSIS中使用CreateShortcut

Windows徽标准则说,您应该只在开始菜单文件夹中创建一个快捷方式,并且不要在桌面上进行任何操作!

相关问题