![](/img/trans.png)
[英]File getting copied to SysWOW64 instead of System32 while installing INF thru Installer
[英]File getting copied to SysWOW64 instead of System32
当我的应用程序运行时,我必须将 psTool 实用程序复制到 System32 文件夹。
我在 64 位 Windows 7 上,每当我尝试通过File.Copy
将 exe 复制到 system32 位文件夹时,exe 总是被复制到 SysWow64。
当我在 destFile 上放置断点时,路径显示为C:\Windows\System32
但文件不在其中(转到 sysWow64)go。 我试过Special Folder
SystemX86
,但文件再次转到 sysWOW64。
string sourceFile = "C:\bin\Debug\somexe.exe"
string destFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), utilityName);
File.Copy(sourceFile, destFile, true);
我在这里缺少什么建议?
编辑
正如下面的答案所指出的,文件系统重定向正在发生。 我正在使用 Visual Studio 的默认设置为 64 位操作系统上的控制台应用程序开发应用程序。 我不确定在编译时必须保留哪些设置/开关,以便应用程序可以在 32 位和 64 位操作系统上运行。
基本上,它应该只将文件复制到System32
而不管它是什么位操作系统。
在程序的后面,我必须通过命令行访问 psTools 实用程序,如果我将它放在 SysWOW64 中,则该实用程序不可用。 如果我进行更改,使用 SysWOW64 的 32 位 cmd.exe,这将再次成为特定于 64 位平台的东西,我不想选择它。
任何可以让应用程序在 32 位和 64 位上运行而没有问题的解决方案? 我是否必须修改代码(如何?)或者我是否必须修改此控制台应用程序项目的某些属性(哪些属性)?
您已经与文件系统重定向发生冲突。
因为%windir%\System32
专为 64 位应用程序保留,在 Windows 的 64 位版本上,尝试访问%windir%\System32
目录的 32 位应用程序会自动透明地重定向到 32 位%windir%\SysWOW64
目录。
首先,确保您的程序确实属于 64 位系统文件夹。 Windows 出于某种原因执行此自动重定向。 32 位版本的 Windows 的 64 位版本上的%windir%\System32
文件夹中没有 go 。
如果您确定要将内容复制到 64 位系统目录中,您有几个选择。 最简单的可能就是将您的实用程序编译为 64 位应用程序。 或者,您可以使用%windir%\Sysnative
而不是%windir%\System32
来告诉 WOW64 重定向器您知道自己在做什么而不执行重定向。
我有同样的问题。 解决方案是在 Visual Studio 的项目属性中将“平台目标”设置为 x64 或 AnyCPU 而不是 x86。 在这种情况下,路径将为"C:\Windows\system32"
并且不会重定向到"C:\Windows\SysWOW64"
您可以通过将任何文件放入“C:\Windows\SysWOW64”文件夹然后使用来检查这一点File.Exists
命令检查是否在该文件夹中找到文件:
File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), sFileName));
要么
File.Exists(Path.Combine(Environment.SystemDirectory, sFileName));
我在我的 32 位应用程序中使用了一个辅助属性,它总是返回本机 system32 文件夹。 辅助属性是:
public static string NativeSystemPath
{
get
{
if (Environment.Is64BitOperatingSystem)
{
return System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Windows),
"Sysnative");
}
return Environment.GetFolderPath(Environment.SpecialFolder.System);
}
}
由于路径环境变量包含c:\windows
在两个 windows x86/x64 版本上,为什么不将您的工具放入c:\windows
: %windir%
?
就我而言,这解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.