2016-12-30 4 views
1

У меня есть следующий .bat файл:Команда в .bat файла нераспознана, когда файл .bat вызывается из программы установки Inno, но отлично работает, когда я запускаю файл битого вручную

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

, который я звоню из раздела [Run] в моей установки Inno так:

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

Я также попытался это:

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

I аль способы получить сообщение

«fbwfmgr» не распознается как внутренняя или внешняя команда, оперативная программа или командный файл.

Если я запустил .bat-файл, дважды щелкнув по нему, он будет работать, если я запустил его из CMD-окна самостоятельно, он работает. Что мне здесь не хватает?

Я запускаю это на системе Windows Embedded Standard x64, зарегистрированной как администратор.


EDIT:

Добавление полный путь к fbwfmgr.exe не решает проблему (я также вручную посмотрел, что это фактическое местоположение fbwfmgr.exe):

%systemroot%\system32\fbwfmgr.exe /enable 

Я нашел a similar thread here где OP имеет ту же проблему при запуске .bat-файла из vbs, никакого решения, похоже, не найдено. С предложением там вырезать средний человек я пытался дозвониться fbwfmgr непосредственно из программы установки Inno с помощью следующей строки:

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

но никакой пользы. Он просто открывает пустое окно консоли. Когда я пытаюсь позвонить fbwfmgr, он не распознается.

+2

Вы пытались добавить 'путь' в первую строку своего .bat-файла? Я ничего не знаю о Inno, но я бы предположил, что у него другая настройка пути. –

+0

Что такое 'fbwfmgr'? От куда это? –

+0

fbwfmgr - это менеджер защиты от записи на диске в встроенных окнах, короче говоря, он запрещает вам писать все, что защищено от записи, и вместо этого хранит его в ОЗУ. Полезно, если вы используете что-то вроде CFAST-карты, которая чувствительна к количеству сделанных вами записей. – user2078171

ответ

2

Не так ли, потому что существует только 64-разрядная версия fbwfmgr в системе C:\Windows\System32?

Как Inno Setup в 32-битном приложении, он по умолчанию gets redirected to C:\Windows\SysWOW64 (32-разрядная версия C:\Windows\System32).Если нет 32-разрядной версии fbwfmgr в C:\Windows\SysWOW64, Inno Setup не сможет ее найти.

Добавить Flags: 64bit, чтобы Inno Setup находил 64-битную версию fbwfmgr.

Кроме того, нет смысла использовать приложение .exe с помощью командного интерпретатора (cmd.exe).

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

С помощью пакетного файла, механика является немного более сложным. Inno Setup по умолчанию (будучи 32-разрядными приложениями) запускает 32-разрядный cmd.exe, который по очереди смотрит на C:\Windows\SysWOW64. Если вы добавите Flags: 64bit, Inno Setup будет запускать 64-битный cmd.exe, который будет выглядеть в C:\Windows\System32.

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

Или используйте 64-bit install mode.

1

Возможно, вам необходимо указать путь к fbwfmgr.

например.

"C:\Users\JOHNDOE\SomeDir\fbwfmgr“

Примечание

Вам почти наверняка нужно запустить пакетный скрипт с правами администратора тоже! Я знаю, что вы сказали, что вы вошли в систему как администратор, но вам нужно быть уверенным, что у вас есть разрешение на запуск сценария, особенно когда вы запускаете его из другого приложения, (inno).

+0

Это не помогло, я отредактировал сообщение, чтобы отразить это. На стороне примечания, почему кто-то поднял ваш ответ, не проверив, что это действительно сработало? – user2078171

+0

Можете ли вы обновить свой код, чтобы отразить его, пожалуйста, чтобы мы могли точно видеть, что вы сейчас пробовали! – Compo