簡體   English   中英

程序(c#)運行升高,仍然無法訪問某些文件

[英]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下運行的應用程序上進行。 你可以在這里閱讀更多相關信息。 該帖子的一個特別相關的部分是談論如何解決它:

應用程序可以使用Wow64DisableWow64FsRedirectionWow64EnableWow64FsRedirectionWow64RevertWow64FsRedirection函數控制WOW64文件系統重定向器。 禁用文件系統重定向會影響調用線程執行的所有文件操作,因此只有在單個CreateFile調用需要時才應禁用它,並在函數返回后立即重新啟用它。 禁用較長時間的文件系統重定向可能會阻止32位應用程序加載系統DLL,從而導致應用程序失敗。

32位應用程序可以通過%windir%\\ Sysnative替換%windir%\\ System32來訪問本機系統目錄。 WOW64將Sysnative識別為一個特殊別名,用於指示文件系統不應重定向訪問。 此機制靈活且易於使用,因此,它是推薦的繞過文件系統重定向的機制。 請注意,64位應用程序無法使用Sysnative別名,因為它是虛擬目錄而不是真實目錄。

我無法得到%windir%\\Sysnative想法,但我希望這對你有用,或者你可以實現重定向的啟用/禁用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM