Inno setup (重新)安装前的压井工艺使用;taskkill/f/im“;在Inno设置中

Inno setup (重新)安装前的压井工艺使用;taskkill/f/im“;在Inno设置中,inno-setup,taskkill,Inno Setup,Taskkill,我安装了一个服务/守护进程,需要在卸载和重新安装之前将其删除 我已经发现: 但是,[Run]部分在安装后运行,所以我不能使用它。安装前使用taskkill终止进程的最佳方法是什么 请注意,我特别想终止该进程。在我的情况下没有任何好处,我只想在安装特定文件之前执行taskkill。我找到了一种方法,使用BeforeInstall参数和代码部分中的一个简单Pascal脚本函数。我添加了一个字符串参数,这样它就可以被多个进程重用 [Files] Source: "My Service 1.e

我安装了一个服务/守护进程,需要在卸载和重新安装之前将其删除

我已经发现:

但是,
[Run]
部分在安装后运行,所以我不能使用它。安装前使用
taskkill
终止进程的最佳方法是什么


请注意,我特别想终止该进程。在我的情况下没有任何好处,我只想在安装特定文件之前执行
taskkill

我找到了一种方法,使用
BeforeInstall
参数和代码部分中的一个简单Pascal脚本函数。我添加了一个字符串参数,这样它就可以被多个进程重用

[Files]
Source: "My Service 1.exe"; DestDir: "{app}"; Flags: ignoreversion; \
    BeforeInstall: TaskKill('My Service 1.exe')
Source: "My Service 2.exe"; DestDir: "{app}"; Flags: ignoreversion; \
    BeforeInstall: TaskKill('My Service 2.exe')
[代码]
过程TaskKill(文件名:String);
变量
结果代码:整数;
开始
Exec('taskkill.exe','/f/im'+'“+FileName+'”,'',SW_HIDE,
EWWAIT未过滤,结果代码);
结束;

除非安装程序在Windows XP计算机上运行,或者您已设置为
(默认值为
),否则安装程序应自动关闭应用程序:

该功能在Windows Vista及更新版本上提供


虽然有时
还不够,但您需要使用
强制


如果环境路径找不到taskkill.exe,您可以为其设置一个绝对路径:
Exec(ExpandConstant({sys}\taskkill.exe')、'/f/im'+'“'+FileName+'”、ExpandConstant({sys}')、SW u HIDE、ewwaitunterminated、ResultCode)不总是有效,我的一个客户端中的taskkill有时会响应“内存不足”错误
[Files]
Source: "My Service 1.exe"; DestDir: "{app}"; Flags: ignoreversion; \
    BeforeInstall: TaskKill('My Service 1.exe')
Source: "My Service 2.exe"; DestDir: "{app}"; Flags: ignoreversion; \
    BeforeInstall: TaskKill('My Service 2.exe')