use*_*679 17 .net c# windows 64-bit 32bit-64bit
我的应用程序运行时,我必须将psTool实用程序复制到System32文件夹.
我在64位Windows 7上,每当我尝试将exe复制到system32位文件夹时File.Copy
,exe总是被复制到SysWow64.
当我在destFile上放置断点时,路径显示为C:\Windows\System32
但文件不会进入(转到sysWow64).我试过了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);
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么建议?
编辑
正如下面的答案中所指出的,存在文件系统重定向.我正在使用Visual Studio的默认设置为64位操作系统上的控制台应用程序开发应用程序.我不确定在编译时必须保留哪些设置/开关,以便应用程序在32位和64位OS上都能正常工作.
基本上,它应该只设置复制文件,System32
而不管它是什么位操作系统.
在程序的后面,我必须通过命令行访问psTools实用程序,如果我将它放在SysWOW64中则不可用.如果我进行更改,使用SysWOW64的32位cmd.exe,这将再次是64位平台特定的东西,我不想选择.
任何可以让应用程序在32位和64位上运行而没有问题的解决方案?我是否必须修改代码(如何?)或者我是否必须修改此控制台应用程序项目的某些属性(属性)?
Cod*_*ray 28
您已经与文件系统重定向发生冲突.
由于%windir%\System32
专门为64位应用程序保留,因此在64位版本的Windows上,尝试访问该%windir%\System32
目录的32位应用程序会自动且透明地重定向到32位%windir%\SysWOW64
目录.
首先,确保您的程序实际上属于64位系统文件夹.Windows执行此自动重定向是有原因的.在64位版本的Windows上,32位内容不会进入该%windir%\System32
文件夹.
如果您确定要将内容复制到64位系统目录中,则有几个选项.最简单的可能是将您的实用程序编译为64位应用程序.或者,您可以告诉WOW64重定向器您知道自己在做什么,而不是通过使用%windir%\Sysnative
而不是执行重定向%windir%\System32
.
我有同样的问题.解决方案是在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));
Run Code Online (Sandbox Code Playgroud)
要么
File.Exists(Path.Combine(Environment.SystemDirectory, sFileName));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15120 次 |
最近记录: |