Windows 使用用户名和密码运行NSIS安装程序

Windows 使用用户名和密码运行NSIS安装程序,windows,installation,nsis,uac,Windows,Installation,Nsis,Uac,如何将用户ID和密码集成到NSIS脚本中,使其能够以管理模式运行 我有一个简单的NSIS脚本,可以将我的应用程序文件复制到程序文件中。此脚本在管理模式下工作。我必须使用adminAdministrator和passwordCorpPass@2424不给UAC对话 示例脚本 # This installs two files, app.exe and logo.ico, creates a start menu shortcut, builds an uninstaller, and # adds

如何将用户ID和密码集成到NSIS脚本中,使其能够以管理模式运行

我有一个简单的NSIS脚本,可以将我的应用程序文件复制到程序文件中。此脚本在管理模式下工作。我必须使用adminAdministrator和passwordCorpPass@2424不给UAC对话

示例脚本

# This installs two files, app.exe and logo.ico, creates a start menu shortcut, builds an uninstaller, and
# adds uninstall information to the registry for Add/Remove Programs

# To get started, put this script into a folder with the two files (app.exe, logo.ico, and license.rtf -
# You'll have to create these yourself) and run makensis on it

# If you change the names "app.exe", "logo.ico", or "license.rtf" you should do a search and replace - they
# show up in a few places.
# All the other settings can be tweaked by editing the !defines at the top of this script
!define APPNAME "TEST App Name"
!define COMPANYNAME "TEST NAME"
!define DESCRIPTION "A short description goes here"
# These three must be integers
!define VERSIONMAJOR 1
!define VERSIONMINOR 1
!define VERSIONBUILD 1
# These will be displayed by the "Click here for support information" link in "Add/Remove Programs"
# It is possible to use "mailto:" links in here to open the email client
!define HELPURL "http://..." # "Support Information" link
!define UPDATEURL "http://..." # "Product Updates" link
!define ABOUTURL "http://..." # "Publisher" link
# This is the size (in kB) of all the files copied into "Program Files"
!define INSTALLSIZE 7233

RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)

InstallDir "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}"

# rtf or txt file - remember if it is txt, it must be in the DOS text format (\r\n)
LicenseData "license.rtf"
# This will be in the installer/uninstaller's title bar
Name "${COMPANYNAME} - ${APPNAME}"
Icon "logo.ico"
outFile "sample-installer.exe"

!include LogicLib.nsh

# Just three pages - license agreement, install location, and installation
page license
page directory
Page instfiles

!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
        messageBox mb_iconstop "Administrator rights required!"
        setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
        quit
${EndIf}
!macroend

function .onInit
    setShellVarContext all
    !insertmacro VerifyUserIsAdmin
functionEnd

section "install"
    # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file)
    setOutPath $INSTDIR
    # Files added here should be removed by the uninstaller (see section "uninstall")
    file "app.exe"
    file "logo.ico"
    # Add any other files for the install directory (license files, app data, etc) here

    # Uninstaller - See function un.onInit and section "uninstall" for configuration
    writeUninstaller "$INSTDIR\uninstall.exe"

    # Start Menu
    createDirectory "$SMPROGRAMS\${COMPANYNAME}"
    createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\app.exe" "" "$INSTDIR\logo.ico"

sectionEnd

# Uninstaller

function un.onInit
    SetShellVarContext all

    #Verify the uninstaller - last chance to back out
    MessageBox MB_OKCANCEL "Permanantly remove ${APPNAME}?" IDOK next
        Abort
    next:
    !insertmacro VerifyUserIsAdmin
functionEnd

section "uninstall"

    # Remove Start Menu launcher
    delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk"
    # Try to remove the Start Menu folder - this will only happen if it is empty
    rmDir "$SMPROGRAMS\${COMPANYNAME}"

    # Remove files
    delete $INSTDIR\app.exe
    delete $INSTDIR\logo.ico

    # Always delete uninstaller as the last action
    delete $INSTDIR\uninstall.exe

    # Try to remove the install directory - this will only happen if it is empty
    rmDir $INSTDIR

    # Remove uninstaller information from the registry
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}"
sectionEnd

您不能绕过UAC,必须有用户在场才能与安全桌面上的UAC对话框进行交互

在Windows 2000/XP/2003上,您可以使用runas/CreateProcessAsUser以其他用户的身份启动新进程,在这些系统上,您可以在2003年升级为管理员,但这不太可能起作用,因为您可能没有相应的权限。这在Vista+上是不可能的,因为UAC引入了,这意味着作为administrators组成员的用户在通过UAC对话框并解锁无限令牌之前不是真正具有完全访问权限的管理员

如果您只需要以特定用户的身份启动一个新流程,那么仍然可以使用LogonUser+CreateProcessAsUser来完成,但如果您的起点是非提升流程,则它将不允许您绕过UAC并获得无限制的管理员令牌


作为系统运行的NT服务可以访问无限令牌,但这当然意味着您必须至少使用UAC升级一次才能首先安装该服务…

如果您有管理员ID和密码,您可以直接验证并执行命令

VB脚本


我认为这是可能的,因为我有管理员ID和密码,可以在引擎盖下使用NSIS安装实用程序对自己进行身份验证。这将作为该用户运行命令,但不会提升到高IL,它将作为中IL运行。请参阅不提供使用提升的访问令牌启动应用程序的功能请参阅帮助工具或尝试psexec。
dim WshShell,FSO ,currDir


set WshShell = CreateObject("WScript.Shell")
set WshEnv = WshShell.Environment("Process")
WinPath = WshEnv("SystemRoot")&"\System32\runas.exe"
set FSO = CreateObject("Scripting.FileSystemObject")
currDir = FSO.GetAbsolutePathName(".")

sUser="Admin"
sPass="Password_123"&VBCRLF
sCmd= currDir &"\MySetup.exe"

if FSO.FileExists(winpath) then
'wscript.echo winpath & " " & "verified"
else
set WshShell=Nothing
set WshEnv=Nothing
set FSO=Nothing
wscript.quit
end if

rc=WshShell.Run("runas /user:" & sUser & " " & CHR(34) & sCmd & CHR(34), 2, FALSE)
Wscript.Sleep 90 
WshShell.AppActivate(WinPath) 
WshShell.SendKeys sPass

set WshShell=Nothing
set WshEnv=Nothing
set FSO=Nothing

wscript.quit