Windows批处理(Inno Setup)中,IF EXIST对C:\ Windows \ System32中的文件的错误行为

3
我正在尝试通过Inno Setup使用批处理脚本复制一个Windows的.dll文件。 显然,即使在`C:\Windows\System32`中没有`msvcr120.dll`文件(我可以确认),我仍然只能看到“文件已存在”。 当然,我也尝试删除下面的引号。
if exist "C:\Windows\System32\msvcr120.dll" (
    rem file exists
    echo  "file exists"
    pause
) else (
    rem file doesn't exist
    copy %1\Utilities\msvcr120.dll  C:\Windows\System32\msvcr120.dll
    echo  "file doesn't exist"
    pause
)   

我手动检查了它。
C:\Users\changwon>dir /A:HS C:\Windows\System32\msvcr120.dll
 Volume in drive C has no label.
 Volume Serial Number is 4A80-BDED

 Directory of C:\Windows\System32

File Not Found

请问有什么问题吗?

如何在Inno Setup中运行批处理文件

[Run]

Filename: "{app}\bin\Icacls\cacls.bat"; Parameters: """{app}"""
Filename: "{app}\Install\psql_init.bat"; Parameters: """{app}"""

其他结果

C:\Users\changwon>dir /A:L C:\Windows\System32\msvcr120.dll
 Directory of C:\Windows\System32

File Not Found

C:\Users\changwon>where msvcr120.dll
INFO: Could not find files for the given pattern(s).

更新

我的操作系统是Windows 7 64位,在C:\Windows\SysWOW64目录下有一个msvcr120.dll文件。 但我想将该文件从源目录复制到C:\Windows\System32目录。


也许 msvcr120.dll 被隐藏了?尝试使用 dir /A:HS C:\Windows\System32\msvcr120.dll;或者有一个同名的目录 -- 将 /A:HS 替换为 /A:D 进行测试... - aschipfl
更新的问题。我找不到文件。实际上,文件是存在的,但为了测试,我将原始的msvcr120.dll重命名为msvcr120_backup.dll。我的目的是在文件不存在时复制该文件。 - Sigularity
也许您可以尝试使用 dir /A:L C:\Windows\System32\msvcr120.dlldir /S C:\Windows\msvcr120.* 命令,或者输入 where msvcr120.dll... - aschipfl
1
好的,问题就像我在我的回答中描述的那样。你尝试过使用“64位”标志吗? - Martin Prikryl
稍等一下,天才。我正在测试你的建议... - Sigularity
1个回答

5
该文件可能存在于 C:\Windows\SysWOW64 中。
Inno Setup 是一个32位应用程序。因此,默认情况下,要运行批处理文件,它会执行32位的 cmd.exe
当32位的 cmd.exe 查询 C:\Windows\System32 时,会被重定向C:\Windows\SysWOW64
阅读关于32位与64位安装的问题
如果您正在使用 [Run] 部分的条目运行批处理文件,请使用 64bit 标记 强制执行64位的 cmd.exe
[Run]
Filename: "{app}\bin\Icacls\cacls.bat"; Parameters: """{app}"""; Flags: 64bit
Filename: "{app}\Install\psql_init.bat"; Parameters: """{app}"""; Flags: 64bit

如果是32位的DLL,你实际上需要将其放在C:\Windows\SysWOW64中。


1
太好了!!!是的,你说得对。它被重定向了。我需要复制64位版本的文件。现在,我的批处理文件检测到它不存在并成功复制了!!非常感谢!! - Sigularity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接