【问题标题】:NSIS executing a system commandNSIS 执行系统命令
【发布时间】:2021-09-07 02:19:36
【问题描述】:

我正在尝试在我的 NSIS 脚本中创建一个具有特权的计划任务。

使用这个命令:

schtasks /create /ru "NT AUTHORITY\SYSTEM" /SC ONSTART /RL "HIGHEST" /TR "C:\Program Files (x86)\MyProgram\MyProgram.exe" /tn MyProgram.Kickstart

从 cmd.exe 中我设法做到了,但现在我需要让 NSIS 脚本来做。 阅读文档和互联网我发现了这个命令:

;   ........
Section
    ExecShell "runas" "myprogram.bat"
SectionEnd
;   ........

其中“myprogram.bat”是包含命令的 bat,但我也尝试将 schtasks 放入其中。 目前似乎没有批处理运行,即使我有这个日志:

Processing script file: "C:\Foo\prova.nsis"
OutFile: "C:\Foo\testnsis.exe"
Section: "TestFST"
ExecShell: runas: "C:\Foo\kickstart.bat" "" 
SectionEnd 

如果我在 bat 中添加 2> kickstart.log 并在 NSIS 之外执行它,我会按预期填充日志,但脚本中没有任何内容。

还要考虑到,为了简单和测试目的,我编写了一个从 powershell 启动的非常基本的脚本:

# Powershell
makensis.exe /O"C:\Foo\prova.log" "C:\Foo\prova.nsis"

; NSIS
OutFile "C:\Foo\testnsis.exe"

Section TestFST
    ExecShell "runas" "C:\Foo\kickstart.bat"
SectionEnd

我可能会遗漏一些东西,因为我对此完全陌生。 我错过了什么?

【问题讨论】:

    标签: nsis


    【解决方案1】:

    您应该在任何地方使用完整路径。提升当前目录时通常设置为system32目录,2> kickstart.log会写在那里。

    ExecShell 对我来说很好用:

    Section
    InitPluginsDir
    FileOpen $0 "$PluginsDir\Test.cmd" w
    FileWrite $0 "@echo off$\r$\n"
    FileWrite $0 "echo Hello World$\r$\n"
    FileWrite $0 'call whoami /groups | find "1-5-32-544"$\r$\n'
    FileWrite $0 'echo Log test string > "%temp%\test.log"$\r$\n'
    FileWrite $0 "ping -n 42 localhost > nul$\r$\n"
    FileClose $0
    ExecShell "runas" "$PluginsDir\Test.cmd"
    SectionEnd
    

    话虽如此,runas 动词有一些问题,如果你知道你总是要执行提升的任务,那么your installer should also request elevation (RequestExecutionLevel Admin)。

    【讨论】:

    • 我不完全确定,但我认为主安装程序具有完全权限。
    • 如果安装程序被提升(UAC 对话框),那么脚本中根本不需要“runas”。
    • 好吧,我添加了您链接的问题中提到的功能,修改了 2> 路径,但我仍然没有错误,也没有结果。这有点令人失望(顺便说一句,我已经阅读了你的答案)
    • 如果你从这个答案复制我的代码会发生什么,你在终端看到 Hello World 吗?
    • 你知道,有时一个人只需要一些(长)假期...接受。
    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2011-03-29
    相关资源
    最近更新 更多