gpt4 book ai didi

inno-setup - 安排任务在 Inno Setup 中隐藏运行

转载 作者:行者123 更新时间:2023-12-04 14:56:50 28 4
gpt4 key购买 nike

我有一个使用 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) 的执行。调度工作得很好,但是当文件运行时命令行窗口仍然出现。这让我相信 runminimizedrunhidden

发生了一些奇怪的事情

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;

请注意由于我的文件路径中有空格而引号的使用。

最佳答案

问题是 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 中隐藏运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67806676/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com