【发布时间】:2013-10-06 20:06:37
【问题描述】:
我正在尝试组合一个简单的 Inno Setup 安装程序,它会查找以前的版本并在继续之前将其删除。一切正常,直到我得到以下代码:
if Exec(UninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
MsgBox('Previous version found and uninstalled successfully.', mbInformation, MB_OK);
end
else
begin
MsgBox('Please uninstall the previous version of this mod before continuing.', mbInformation, MB_OK);
Result := FALSE;
end;
这是一段非常简单的代码,但总是失败。我检查了 UninstallString 的内容,它们是正确的 (C:\Windows\unins000.exe) 但 Exec 失败并出现错误:“目录名称无效。”
它似乎无法正确读取“UninstallString”的内容,因为如果我手动输入它们(例如Exec('C:\Windows\unins000.exe, ...),它可以正常工作。
如何让Exec 按预期处理字符串“UninstallString”?
【问题讨论】:
-
谢谢,你是对的。我收到以下错误:“目录名称无效。”
-
是的,我肯定在查找以前的 AppId。其次,正如问题中所述,我检查了字符串的内容,它们符合预期:-/
-
那是不可能的。字符串常量和与常量具有相同值的
string类型变量之间通常没有区别。问题一定出在其他地方。不要使用AnsiString类型,例如对于UninstallString变量,不是吗? -
我用:
UninstallString: string;有错吗?而且,我向你保证,内容就在那里。我刚刚又检查了一遍。这让我难以置信。 -
不,这是正确的。然后(从
Exec函数的角度来看)该常量与具有与常量相同值的变量之间绝对没有区别。我开始考虑该注册表值中的一些不可打印字符...您如何检查UninstallString值?
标签: installation inno-setup pascal