亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# Process.Start()找不到系統(tǒng)文件的解決方法

 更新時(shí)間:2023年09月06日 09:24:17   作者:yizhou2010  
vs1027在X64應(yīng)用程序下執(zhí)行process.start()時(shí),OK;但是在X86應(yīng)用程序下執(zhí)行process.start(),報(bào)錯(cuò):找不到系統(tǒng)文件,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下

問(wèn)題描述

vs1027在X64應(yīng)用程序下執(zhí)行process.start()時(shí),OK;但是在X86應(yīng)用程序下執(zhí)行process.start(),報(bào)錯(cuò):找不到系統(tǒng)文件

if (kbpr.HasExited)
{
	kbpr = Process.Start(@"C:\Windows\System32\osk.exe");
}

網(wǎng)上搜索良久,發(fā)現(xiàn)原因?yàn)椋?strong>windows重定向搞得鬼

在64位的Windows操作系統(tǒng)中,為了兼容32位程序的運(yùn)行,64位的Windows操作系統(tǒng)采用重定向機(jī)制。目的是為了能讓32位程序在64位的操作系統(tǒng)不僅能操作關(guān)鍵文件文夾和關(guān)鍵的注冊(cè)表并且又要避免與64位程序沖突;因此,32位應(yīng)用程序的運(yùn)行是通過(guò)WOW64的模擬器來(lái)實(shí)現(xiàn)的。WOW64 是一個(gè)由操作系統(tǒng)提供的兼容性環(huán)境,它使得 32 位應(yīng)用程序能夠在 Windows 64 位操作系統(tǒng)上運(yùn)行,在系統(tǒng)的Windows目錄下,存在System32和SysWOW64兩個(gè)文件夾:

System32文件夾下存放的是64位DLL

SysWOW64文件夾下存放的是32位DLL

因此,如果我們用32位程序去訪問(wèn)c:\windows\system32,不管我們用硬編碼還是其它的方式,系統(tǒng)都會(huì)自動(dòng)地給我們轉(zhuǎn)向到C:\windows\syswow64下面。

禁止系統(tǒng)的重定向的解決辦法是調(diào)用下面的API函數(shù)

禁用系統(tǒng)重定向用下面的函數(shù):
BOOL Wow64DisableWow64FsRedirection(PVOID OldValue);
恢復(fù)系統(tǒng)重定向用下面的函數(shù):
BOOL Wow64RevertWow64FsRedirection(PVOID OldValue);

解決辦法

具體代碼如下:

// 關(guān)閉64位(文件系統(tǒng))的操作轉(zhuǎn)向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
// 開(kāi)啟64位(文件系統(tǒng))的操作轉(zhuǎn)向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
IntPtr oldWOW64State = new IntPtr();
Wow64DisableWow64FsRedirection(ref oldWOW64State);   // 關(guān)閉64位(文件系統(tǒng))的操作轉(zhuǎn)向
Wow64RevertWow64FsRedirection(oldWOW64State);        // 開(kāi)啟64位(文件系統(tǒng))的操作轉(zhuǎn)向

注1

網(wǎng)上還有中辦法,將路徑c:\windows\system32\改為c:\windows\sysnative\,但是我嘗試,好像不管用;可能是需要注冊(cè)表或者哪里設(shè)置過(guò)吧

注2

當(dāng)然最簡(jiǎn)單的辦法,是將應(yīng)用程序改為64位,就不存在以上問(wèn)題了。

【參考1】https://www.cnblogs.com/iamlucky/p/5998086.html

【參考2】https://www.bbsmax.com/A/mo5kj04KJw/

到此這篇關(guān)于c# Process.Start()找不到系統(tǒng)文件的解決方法的文章就介紹到這了,更多相關(guān)c# Process.Start()找不到系統(tǒng)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論