从Inno安装程序调用.bat文件时无法识别.bat文件中的命令,但在我手动运行bat文件时工作正常

时间:2016-12-30 13:22:42

标签: batch-file inno-setup

我有以下.bat文件:

fbwfmgr /enable
.
.
.
fbwfmgr /addexclusion c: "some folder 1"
fbwfmgr /addexclusion c: "some folder 2"
.
.
.

我正在Inno Setup的[Run]部分调用,如下所示:

Filename: "{tmp}\set_write_protection_rules.bat";

我也试过这个:

Filename: "{cmd}"; Parameters: "/c ""{tmp}\set_write_protection_rules.bat""";    

我总是收到消息

  

'fbwfmgr'未被识别为内部或外部命令,可操作程序或批处理文件。

如果我通过双击它来运行.bat文件就行了,如果我自己从cmd窗口运行它就可以了。我在这里缺少什么?

我在以管理员身份登录的Windows Embedded Standard x64系统上运行此功能。

编辑:

添加fbwfmgr.exe的完整路径无法解决问题(我还手动查看了fbwfmgr.exe的实际位置):

%systemroot%\system32\fbwfmgr.exe /enable

我发现a similar thread here在从vbs运行.bat文件时OP遇到了同样的问题,似乎没有找到解决方案。从一个建议那里切断中间人,我试图直接从Inno Setup调用fbwfmgr,行如下:

Filename: "{cmd}"; Parameters: "c/ ""fbwfmgr /enable""";

但没有用。它只是打开一个空的控制台窗口。当我尝试从那里拨打fbwfmgr时,无法识别。

2 个答案:

答案 0 :(得分:3)

不是吗,因为系统fbwfmgr中只有C:\Windows\System32的64位版本?

作为32位应用程序中的Inno Setup,默认为gets redirected to C:\Windows\SysWOW64(32位版本的C:\Windows\System32)。如果fbwfmgr中没有32位版本的C:\Windows\SysWOW64,则Inno安装程序无法找到它。

添加Flags: 64bit以使Inno Setup找到fbwfmgr的64位版本。

此外,通过命令解释程序(.exe)运行cmd.exe应用程序毫无意义。

[Run]
Filename: "fbwfmgr.exe"; Parameters: "/enable"; Flags: 64bit

使用批处理文件,机制有点复杂。 Inno Setup默认情况下(32位应用程序)运行32位cmd.exe,然后查看C:\Windows\SysWOW64。如果您添加Flags: 64bit,Inno安装程序将运行64位cmd.exe,这将调查C:\Windows\System32

[Run]
Filename: "{tmp}\set_write_protection_rules.bat"; Flags: 64bit

或使用64-bit install mode

答案 1 :(得分:1)

您可能需要提供gl.h的路径。

e.g。

fbwfmgr

注意

您几乎肯定也需要使用管理权限运行批处理脚本!我知道您说您以管理员身份登录,但您需要确保您具有运行脚本的权限,尤其是当您从另一个应用程序(inno)运行时。