计划任务在 Inno Setup 中隐藏运行
Posted
技术标签:
【中文标题】计划任务在 Inno Setup 中隐藏运行【英文标题】:Schedule task to run hidden in Inno Setup 【发布时间】:2021-08-20 16:54:15 【问题描述】:我有一个使用 pyinstaller 创建的 exe 文件。我正在使用 Inno Setup 为这个可执行文件创建一个 Windows 安装程序。
这是我的编译器脚本中的一个 sn-p:
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 2 /TN ""Discovery"" /TR ""'app\Discovery.exe'"""; \
Flags: runhidden runminimized
我正在使用schtasks
来安排我的 exe 文件 (Discovery.exe
) 的执行。调度工作正常,但文件运行时仍会出现命令行窗口。这让我相信runminimized
和runhidden
发生了一些奇怪的事情
Discovery.exe
实际上是使用 pyinstaller 创建的命令行应用程序。
如何确保在该文件应该运行时不显示命令行窗口?
根据@Bill_Stewart 的回答,关于 Inno Setup 的最终工作 [Run] 声明:
[Run]
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 5 /TN ""Discovery"" /TR ""'wscript.exe' 'app\RunHidden.js' 'app\Discovery.exe' "" "; \
Flags: runhidden runminimized;
由于我的文件路径中有空格,请注意引号的使用。
【问题讨论】:
【参考方案1】:问题在于 Inno Setup 的 [Run]
部分中的 runhidden
标志正在运行 schtasks 命令,而 schtasks 命令正在调度您的程序(Discovery.exe) 运行。安装包时,schtasks 命令会按要求隐藏运行,但这并不意味着您正在创建的计划任务将作为隐藏进程运行 Discovery.exe。
如果您以当前用户身份运行计划任务,则任务计划程序没有“隐藏运行此任务”设置。但是,您可以通过创建一个简短的 WSH 脚本来解决此问题:
// RunHidden.js
// Runs a program in a hidden window
// Run this script using wscript.exe
var Args = WScript.Arguments;
if ( (Args.Unnamed.Count == 0) || (Args.Named.Item(0) == "/?") )
WScript.Echo('Usage: wscript RunHidden.js "command"');
WScript.Quit(0);
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var Command = Args.Unnamed.Item(0);
if ( ! FSO.FileExists(Command) )
WScript.Echo("File not found - " + Command);
WScript.Quit(2); // ERROR_FILE_NOT_FOUND
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run('"' + Command + '"',0);
您可以将上述脚本与您的安装一起分发。调度wscript.exe作为要运行的程序,上面的脚本和Discovery.exe作为参数,调度任务应该无窗口运行命令。
【讨论】:
以上是关于计划任务在 Inno Setup 中隐藏运行的主要内容,如果未能解决你的问题,请参考以下文章
在 Inno Setup 中运行 schtask.exe 之前使用安装路径创建 XML 任务文件