我试图通过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
你能告诉我出了什么问题吗?
[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。
答案 0 :(得分:5)
该文件可能存在于C:\Windows\SysWOW64
。
Inno Setup是一个32位应用程序。因此,默认情况下,要运行批处理文件,它将执行32位cmd.exe
。
在查询cmd.exe
,gets redirected到C:\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
。