0

WinBuilder を使用して、.NET 3.0/2.0 のサポートを Windows PE 3.0 に組み込みました。システムフォルダにある必要なプログラムをチェックするプログラムを作成しました。diskpart が Windows PE の「X:\Windows\System32\diskpart.exe」にあることはわかっています。しかし、このコードを使用すると:

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 のネイティブ サポートがサポートされていないことは承知していますが、少なくとも試してみようと思いました。問題が何であるか知っている人はいますか?

4

1 に答える 1

4

ファイルに対する読み取り権限がない場合、File.Exists() は false を返します。

ドキュメントから:

呼び出し元に必要なアクセス許可があり、パスに既存のファイルの名前が含まれている場合はtrue 。それ以外の場合はfalse。このメソッドは、 pathが null、無効なパス、または長さ 0 の文字列の場合にもfalseを返します。呼び出し元が指定されたファイルを読み取るための十分な権限を持っていない場合、例外はスローされず、メソッドはpathの存在に関係なくfalseを返します。

ほとんどの場合、 File.Exists() を使用して代わりにファイルを開こうとし、失敗した場合に例外をキャッチすることは避けたいと考えています。これは、取得したファイル ストリームを読み書きするつもりがない場合でも当てはまります。これには、ストリームをすぐに使用できるという素晴らしいボーナスもあります。

于 2012-06-26T15:41:36.693 に答える