[英]File Not Found in %TEMP% on Win7
我有一個奇怪的錯誤,我的代碼返回了一個文件未找到異常,但該文件似乎恰好在應有的位置。 我的項目有一些代碼來運行系統cmdlet,並在XML輸出文件中查找cmdlet的結果。 我們告訴cmdlet將輸出XML放入系統TEMP目錄的自定義子目錄中,例如C:\\ WINDOWS \\ TEMP \\ SomeFolder \\ output.xml。 然后,我們使用.NET XmlDocument類打開並解析XML文件。
在WinXP上,這有效。 在我的開發箱中,這可行。 在干凈的Win7測試機上,不是。
我的第一個想法是,我正在運行Vista / Win7文件虛擬化,但是我們的應用程序清單指定我們的應用程序以Admin身份運行-從我讀到的內容來看,應該繞過文件虛擬化。
另一個難題是,即使文件在計算機本地,我們的代碼也喜歡使用UNC文件路徑。 (我們要求有問題的代碼可能需要在遠程計算機上運行cmdlet,因此輸出XML也可以在遠程計算機上。)因此,我們嘗試通過\\ MATT-WIN7 \\ C打開XML文件。 $ \\ WINDOWS \\ TEMP \\ SomeFolder.xml而不是C:\\ WINDOWS \\ TEMP \\ SomeFolder \\ output.xml。
但是我暫時刪除了UNC路徑代碼,並且對簡單的File.Exists()調用仍然表示XML文件不存在,因為Windows資源管理器顯示該文件恰好位於我認為應該的位置。
我還沒有讀過文件虛擬化的細微差別嗎?
我的解決方法是將輸出xml文件移動到其他位置,但是當它需要在遠程計算機上運行時,這可能會破壞代碼的“可移植性”,因為使用%TEMP%位置是可以解析為遠程位置的位置。計算機非常容易(通過遠程注冊表調用來查找系統環境變量)。
我希望將文件保留在原處,並修復我們的代碼,以便它實際上可以找到該文件!
%TEMP%環境變量有一個用戶特定的替代,它指向%USERPROFILE%\\AppData\\Local\\Temp
,而不是%SYSTEMROOT%\\Temp
。 確保您的代碼正在您希望其查看的temp文件夾中。
更新 :根據您的評論,看來問題是您的應用程序實際上並未在測試計算機上提升,但在開發計算機上卻得到提升。 我懷疑以下情況:
您可以創建一個自簽名證書來對二進制文件進行代碼簽名,然后將該證書添加到測試計算機中,以獲取UAC提示。 確認已正確提升您的應用程序之后,用於訪問系統%TEMP%文件夾的代碼將正確運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.