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

时间:2016-01-19 14:08:21

标签: batch-file inno-setup

我试图通过Inno Setup使用批处理脚本复制一个Windows .dll文件。

显然,即使msvcr120.dll中没有C:\Windows\System32文件(我可以确认),我只能看到"文件存在" 。 当然,我也尝试删除下面的双引号。

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。

1 个答案:

答案 0 :(得分:5)

该文件可能存在于C:\Windows\SysWOW64

Inno Setup是一个32位应用程序。因此,默认情况下,要运行批处理文件,它将执行32位cmd.exe

在查询cmd.exegets redirectedC:\Windows\System32时,32位C:\Windows\SysWOW64

了解issues with 32-bit vs. 64-bit installations

如果您使用[Run]部分中的条目运行批处理文件,请使用64bit flag强制执行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