gpt4 book ai didi

inno-setup - 如何使用带参数的 exec 与正在提取的正在运行的进程进行交互

转载 作者:行者123 更新时间:2023-12-01 22:00:13 33 4
gpt4 key购买 nike

救命!好吧,我已经在网络(和 Stack Overflow)上搜索了答案。我需要帮助让我的 Inno 安装程序将带有参数的命令行发送到正在运行的应用程序。

在 myapplication_setup.exe 中,我已经打包了 myapplication.exe。现在,myapplication.exe 具备了接收命令行参数的能力。如果我使用某些参数启动第二个实例,它将把它们传递给第一个实例,然后退出它自己的第二个实例(两者都退出)。这让我可以使用 myapplication.exe 的第二个实例来使第一个实例退出。如果我从批处理文件、cmd 框或运行框执行此操作,此部分将完美运行。

现在,我需要安装程序调用此命令行:“c:\myapplication\myapplication.exe quit”,然后检查两个实例是否已退出。我也许可以只检查安装程序启动的第二个实例,因为它们几乎同时退出。我不太了解 inno,所以这是我想出的用于执行命令行功能的代码。问题是我总是得到 267 的 ResultCode,而我的应用程序从未退出。

安装程序需要调用 exec 函数并确保 myapplication.exe 已退出,然后才能提取新版本的 myapplication.exe。

有人可以查看我的代码并帮助我吗?谢谢!

[code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: Integer;
begin
if Exec('C:\myapplication\myapplication.exe', 'quit', '{app}', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
msgbox('True: C:\myapplication\myapplication.exe : ' + IntToStr(ResultCode), mbInformation, MB_OK);
end
else begin
msgbox('False: C:\myapplication\myapplication.exe : ' + IntToStr(ResultCode), mbInformation, MB_OK);
SysErrorMessage(ResultCode)
end;
end;

最佳答案

看来 267 是一个“无效目录”错误。
您确定 Exec 指向正确的位置吗?
就我个人而言,我会将您的代码更改为以下内容:

[code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: Integer;
begin
if Exec(ExpandConstant('{app}\myapplication.exe'), 'quit', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
msgbox('True: C:\myapplication\myapplication.exe : ' + IntToStr(ResultCode), mbInformation, MB_OK);
end
else begin
msgbox('False: C:\myapplication\myapplication.exe : ' + SysErrorMessage(ResultCode), mbInformation, MB_OK);
end;
end;

这当然假设现有的 myapplication.exe 也位于 {app} 中。可以肯定的是,您始终可以将 myapplication.exe 提取到临时目录并从那里运行它。像这样的东西:

[code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: Integer;
begin
ExtractTemporaryFile('myapplication.exe');
if Exec(ExpandConstant('{tmp}\myapplication.exe'), 'quit', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
msgbox('True: myapplication.exe : ' + IntToStr(ResultCode), mbInformation, MB_OK);
end
else begin
msgbox('False: myapplication.exe : ' + SysErrorMessage(ResultCode), mbInformation, MB_OK);
end;
end;

关于inno-setup - 如何使用带参数的 exec 与正在提取的正在运行的进程进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107279/

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