سؤال

System32 and syswow64 folders are exist under C:\Windows in 64-bit OS.

I have a file called xyz.sys under System32\drivers folder. I tried to rename xyz.sys to xyz1.sys using below code:

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

But in 64-bit OS, innosetup is taking {sys}='Driveletter:\Windows\syswow64' as default one.

Even i tried below code to rename xyz.sys file under System32\drivers:

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

But above code also not working, can anyone suggest me how to rename system32 files in 64-bit OS.

Am using windows2008R2.

هل كانت مفيدة؟

المحلول

By default 32-bit applications (and installers for 32-bit apps) can only access the 32-bit system folder. You can use the 64bit flag on various entries to override this, if there is a specific 64-bit file you need to install for a 32-bit application, for example.

You can do the same thing from [Code] by using the EnableFsRedirection support function. That help page shows an example of executing the 64-bit command prompt; you can similarly access the 64-bit {sys} from within that block. Don't forget to restore the previous state afterwards, as shown.

Bear in mind however that renaming an installed driver file is generally not a good idea -- there will be catalog and INF files still pointing to its old name, and the system may get confused by this. It's better to properly uninstall the driver and reinstall the new one.

نصائح أخرى

InnoSetup runs the install in 32 bit mode unless you set ArchitecturesInstallIn64BitMode to x64.

If you want access to the 64-bit files using {sys}, you should set that value.

More explanation under the {sys} heading at the docs.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top