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、无效路径或长度为零的字符串,此方法也会返回false 。如果调用者没有足够的权限来读取指定的文件,则不会抛出异常,并且无论path是否存在,该方法都会返回false

您几乎总是希望避免使用 File.Exists() 而只是尝试打开文件,并在失败时捕获异常。即使您不打算读取或写入您获得的文件流也是如此。这有一个很好的好处,就是让您也可以立即使用流。

于 2012-06-26T15:41:36.693 回答