簡體   English   中英

在Win7的%TEMP%中找不到文件

[英]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,要么以管理員身份運行VS。 兩者都很大。 :-)
  • 您的二進制文件沒有代碼簽名,並且不在兩個受信任位置之一-%SystemRoot%\\ system32或%ProgramFiles%中。 出於安全原因,對於具有海拔清單但未進行代碼簽名或位於受信任位置的應用,UAC甚至不會提示用戶進行海拔提升。

您可以創建一個自簽名證書來對二進制文件進行代碼簽名,然后將該證書添加到測試計算機中,以獲取UAC提示。 確認已正確提升您的應用程序之后,用於訪問系統%TEMP%文件夾的代碼將正確運行。

暫無
暫無

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

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