Inno Setup: как переименовать файлы system32 в 64-битной ОС

Папки System32 и syswow64 находятся в папке C:\Windows в 64-битной ОС.

У меня есть файл с именем xyz.sys в папке System32\drivers. Я попытался переименовать xyz.sys в xyz1.sys, используя следующий код:

if FileExists(ExpandConstant('{sys}\drivers\xyz.sys')) then
  RenameFile(ExpandConstant('{sys}\drivers\xyz.sys'), ExpandConstant('{sys}\drivers\xyz1.sys'));

Но в 64-битной ОС innosetup использует {sys}='Driveletter:\Windows\syswow64' по умолчанию.

Даже я попытался ниже код переименовать файл xyz.sys под System32\drivers:

if FileExists(ExpandConstant('{win}\System32\drivers\xyz.sys')) then
  RenameFile(ExpandConstant('{win}\System32\drivers\xyz.sys'), ExpandConstant('{win}\System32\drivers\xyz1.sys'));

Но приведенный выше код также не работает, может ли кто-нибудь предложить мне, как переименовать файлы system32 в 64-битной ОС.

Использую windows2008R2.


person user1752602    schedule 21.01.2013    source источник


Ответы (2)


По умолчанию 32-разрядные приложения (и установщики 32-разрядных приложений) могут получить доступ только к 32-разрядной системной папке. Вы можете использовать флаг 64bit в различных записях, чтобы переопределить это, например, если есть определенный 64-битный файл, который вам нужно установить для 32-битного приложения.

Вы можете сделать то же самое из [Code], используя функцию поддержки EnableFsRedirection. На этой странице справки показан пример выполнения 64-битной командной строки; вы можете аналогичным образом получить доступ к 64-битному {sys} из этого блока. Не забудьте впоследствии восстановить предыдущее состояние, как показано на рисунке.

Имейте в виду, однако, что переименование установленного файла драйвера, как правило, не является хорошей идеей - каталог и INF-файлы все еще будут указывать на его старое имя, и система может запутаться из-за этого. Лучше правильно удалить драйвер и переустановить новый.

person Miral    schedule 22.01.2013
comment
Я никогда раньше не видел {sys64}, выглядит полезно, у вас есть ссылка на какую-нибудь документацию по нему? Я не могу найти его в документах, на которые я ссылаюсь :) - person Joachim Isaksson; 23.01.2013
comment
Извините, я перепутал {pf64} и {syswow64} (последняя из которых на самом деле является 32-битной системной папкой). Я исправил свой ответ, включая ссылку справки. - person Miral; 23.01.2013
comment
спасибо miral, мой код отлично работает с вашими предложениями - person user1752602; 23.01.2013
comment
Если ответ работает для вас, то галочка приветствуется... - person Miral; 24.01.2013

InnoSetup запускает установку в 32-битном режиме, если вы не установите для ArchitecturesInstallIn64BitMode значение x64.

Если вы хотите получить доступ к 64-битным файлам, используя {sys}, вы должны установить это значение.

Дополнительные пояснения под заголовком {sys} документации.

person Joachim Isaksson    schedule 21.01.2013
comment
Обратите внимание, что это значение следует устанавливать только в том случае, если само приложение является 64-разрядным. Если ваше приложение является 32-разрядным, но устанавливает или нуждается в управлении 64-разрядным драйвером, есть и другие способы сделать это. - person Miral; 22.01.2013