2012-06-26 38 views
0

我已經使用WinBuilder將.NET 3.0/2.0支持包含到Windows PE 3.0中。我製作了一個程序,用於檢查系統文件夾中的必要程序。我知道diskpart位於windows PE中的「X:\ Windows \ System32 \ diskpart.exe」。但是,當我使用此代碼:在C#程序中找不到文件錯誤?

if (File.Exists(@"X:\Windows\System32\diskpart.exe")) 
{ 
    MessageBox.Show("Found it"); 
} 

它沒有找到該文件。我曾經試着寫的文本字符串轉換成一個批處理文件,像這樣:

System.IO.WriteAllText(@"X:\temp\diskpart.cmd", "diskpart.exe\npause"); 
Process proc = new Process; 
proc.StartInfo.FileName = @"X:\temp\diskpart.cmd"; 
proc.Start(); 

它開始批處理文件就好了,但它說,它無法找到該程序的Diskpart.exe。奇怪的是,當我離開程序並手動輸入X:\ temp \ diskpart.cmd時,它運行的批處理文件很好,並且能夠運行diskpart.exe。我也嘗試將進程的用戶名更改爲SYSTEM,但仍然無效。

我知道在WinPE中對.NET的原生支持不被支持,但我認爲我至少會嘗試。任何人都知道這個問題可能是什麼?

+0

是否嘗試在當前用戶下運行該進程? – k0stya

+0

最初我沒有包含proc.StartInfo.UserName屬性。所以是的。 –

+0

爲什麼不讓你的程序發出Directory.GetFiles(「X:\\」,遞歸)的結果來調試呢?只是看代碼不會導致解決方案。你需要調查。 – usr

回答

4

如果您對文件沒有讀取權限,File.Exists()將返回false。

Docs

如果調用方具有所需的權限和路徑包含現有文件的名稱;否則,虛假。此方法還返回錯誤如果路徑爲空,無效路徑或零長度字符串。如果調用者沒有足夠的權限來讀取指定的文件,則不會拋出異常,並且該方法返回false,而不管路徑的存在。

你幾乎總是希望避免使用File.Exists()而不是僅僅試圖打開文件,並且在失敗時捕獲異常。即使您不打算讀取或寫入您獲得的文件流,情況也是如此。這有很好的好處,可以讓你馬上使用流。

+0

如果程序是從WinPE的CMD運行的,是不是從SYSTEM運行的所有東西?至少在TaskMgr中,它表示運行我的程序的用戶是SYSTEM。 –

相關問題