Installation Inno设置:Exec can';不读字符串?

Installation Inno设置:Exec can';不读字符串?,installation,inno-setup,pascal,Installation,Inno Setup,Pascal,我正在尝试组装一个简单的Inno安装程序,它会查找以前的版本,并在继续之前将其删除。在我获得以下代码之前,一切正常: if Exec(UninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin MsgBox('Previous version found and uninstalled successfully.', mbInformation, MB_OK);

我正在尝试组装一个简单的Inno安装程序,它会查找以前的版本,并在继续之前将其删除。在我获得以下代码之前,一切正常:

  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('C:\Windows\unins000.exe,
),它工作正常


如何使
Exec
按预期处理字符串“UninstallString”?

我不知道您是否已经执行了
MsgBox
来确定注册表中
UninstallString
确切的字符串,但在注册表中,正常的字符串是
“C:\Windows\unins000.exe”

注意命令周围的额外的

在命令周围使用
Exec
时,您会得到一个ResultCode 267,这是一个
无效目录
错误。因此,您需要在
Exec
之前去除它们


当您在
Exec
中手动输入
C:\Windows\unins000.exe时,您很方便地忘记了它们;)

谢谢,您是对的。我得到了以下错误:“目录名无效。”是的,我正在查找以前的AppId。其次,如问题中所述,我检查了字符串的内容,它们与预期的一样:-/这是不可能的。字符串常量和值与常量相同的
string
类型变量之间通常没有区别。问题一定在别的地方。您是否使用
AnsiString
类型,例如,对于
UninstallString
变量,您是否使用?我使用:
UninstallString:string错了吗?而且,我向你保证,内容就在那里。我又查了一遍。这让我难以置信。不,没错。然后,(从函数的角度来看,
Exec
内部)该常数和与该常数具有相同值的变量之间绝对没有区别。我开始考虑注册表值中的一些不可打印字符。。。您是如何检查
UninstallString
值的?打印字符串值的
MsgBox
方法不是最好的方法,因为您会丢失不可打印的字符。对于这种情况,这些可能是严重的问题(但似乎不是)。是的,但是
是一个可打印的字符,我认为该命令是围绕
(这
Exec
无法处理)。不,我的意思是我们正在讨论的文件名可能包含不可打印的字符,例如#8、#9等等。还有那些你无法通过
MsgBox
看到的,它们可能是
Exec
的问题
MsgBox
不是查看实际字符串值的正确方法。你好!:-)@Rik发现这一点做得很好!正如TLama所建议的,我将该值输出到Log,它确实是“C:\Windows\unins000.exe”!