我使用WinBuilder在Windows PE 3.0中包含对.NET 3.0 / 2.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的原生支持,但我想我至少会尝试。谁知道问题可能是什么?
答案 0 :(得分:4)
如果您对文件没有读取权限,则File.Exists()将返回false。
来自Docs:
true 如果调用者具有所需权限,路径包含现有文件的名称;否则, false 。如果 path 为null,无效路径或零长度字符串,此方法也会返回 false 。如果调用者没有足够的权限来读取指定的文件,则不会抛出任何异常,并且无论是否存在 path ,该方法都会返回 false 。
您几乎总是希望避免使用File.Exists()而只是尝试打开文件,并在失败时捕获异常。即使您不打算读取或写入您获得的文件流,也是如此。这有一个很好的奖励,允许你立即使用流。