[英]Program (c#) Running Elevated, Still Can't Access Some Files
我的代碼正在運行提升,但沒有任何東西可以看到/執行c:\\ windows \\ system32 \\ rstrui.exe(系統還原點UI)。
我仔細檢查以確保代碼確實正在運行提升(它是),並且我已經使用File.Exist()和Directory.GetFiles()以及System.Diagnostics.Process.Start()進行了測試; 找不到文件是返回的內容。
該程序確實存在,我可以真正運行它,我可以將路徑復制/粘貼到DOS並列出,執行它(沒有隱藏空格等)。
有任何想法嗎?
解決方案:
Tim(下面)給了我解決方案,而不是引用c:\\ windows \\ system32引用c:\\ windows \\ sysnative。 “sysnative”被重定向,或者,好吧,沒有。 我對x64重定向的東西仍然有點困惑。 關鍵是,以下工作:
Environment.GetEnvironmentVariable(“windir”)+ @“\\ sysnative”
謝謝蒂姆!
讓我猜一下......你在64位Windows安裝上運行x86應用程序? 我不確定原因,但這個帖子提供了一些信息。 如果你為原生64位(或我認為的任何CPU)而不是x86編譯它,它將正確找到該文件。
原因是系統文件夾重定向在64位操作系統中在WOW64下運行的應用程序上進行。 你可以在這里閱讀更多相關信息。 該帖子的一個特別相關的部分是談論如何解決它:
應用程序可以使用Wow64DisableWow64FsRedirection , Wow64EnableWow64FsRedirection和Wow64RevertWow64FsRedirection函數控制WOW64文件系統重定向器。 禁用文件系統重定向會影響調用線程執行的所有文件操作,因此只有在單個CreateFile調用需要時才應禁用它,並在函數返回后立即重新啟用它。 禁用較長時間的文件系統重定向可能會阻止32位應用程序加載系統DLL,從而導致應用程序失敗。
32位應用程序可以通過%windir%\\ Sysnative替換%windir%\\ System32來訪問本機系統目錄。 WOW64將Sysnative識別為一個特殊別名,用於指示文件系統不應重定向訪問。 此機制靈活且易於使用,因此,它是推薦的繞過文件系統重定向的機制。 請注意,64位應用程序無法使用Sysnative別名,因為它是虛擬目錄而不是真實目錄。
我無法得到%windir%\\Sysnative
想法,但我希望這對你有用,或者你可以實現重定向的啟用/禁用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.