将任务安排到 运行 隐藏在 Inno Setup 中
Schedule task to run hidden in Inno Setup
我有一个使用 pyinstaller 创建的 exe 文件。我正在使用 Inno Setup 为此可执行文件创建 Windows 安装程序。
这是我的编译器脚本的一个片段:
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 2 /TN ""Discovery"" /TR ""'{app}\Discovery.exe'"""; \
Flags: runhidden runminimized
我正在使用 schtasks
来安排我的 exe 文件 (Discovery.exe
) 的执行。调度工作得很好,但是当文件 运行 时命令行 window 仍然出现。这让我相信 runminimized
和 runhidden
发生了一些奇怪的事情
Discovery.exe
实际上是使用pyinstaller创建的命令行应用程序。
如何确保当此文件应该 运行 时不显示任何命令行 window?
Inno Setup 的最终工作 [运行] 声明基于@Bill_Stewart 的回答:
[Run]
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 5 /TN ""Discovery"" /TR ""'wscript.exe' '{app}\RunHidden.js' '{app}\Discovery.exe' "" "; \
Flags: runhidden runminimized;
由于我的文件路径中有空格,请注意引号的使用。
问题是 Inno Setup 的 [Run]
部分中的 runhidden
标志是 运行ning 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作为参数,以及计划任务应该 运行 命令没有 window.
我有一个使用 pyinstaller 创建的 exe 文件。我正在使用 Inno Setup 为此可执行文件创建 Windows 安装程序。
这是我的编译器脚本的一个片段:
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 2 /TN ""Discovery"" /TR ""'{app}\Discovery.exe'"""; \
Flags: runhidden runminimized
我正在使用 schtasks
来安排我的 exe 文件 (Discovery.exe
) 的执行。调度工作得很好,但是当文件 运行 时命令行 window 仍然出现。这让我相信 runminimized
和 runhidden
Discovery.exe
实际上是使用pyinstaller创建的命令行应用程序。
如何确保当此文件应该 运行 时不显示任何命令行 window?
Inno Setup 的最终工作 [运行] 声明基于@Bill_Stewart 的回答:
[Run]
Filename: "schtasks"; \
Parameters: "/Create /F /SC MINUTE /MO 5 /TN ""Discovery"" /TR ""'wscript.exe' '{app}\RunHidden.js' '{app}\Discovery.exe' "" "; \
Flags: runhidden runminimized;
由于我的文件路径中有空格,请注意引号的使用。
问题是 Inno Setup 的 [Run]
部分中的 runhidden
标志是 运行ning 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作为参数,以及计划任务应该 运行 命令没有 window.