-1

我正在编写一个 CLI 程序,该程序在事件上运行Process.Start()在用户定义的文件上。这尊重%PATH%,但File.Open()不尊重。

基本上,当程序启动时,我会进行各种检查。我想要的检查之一是该文件是否存在并且可以由当前用户打开,ala:

try
{
    fs = File.Open(Run, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    Run = args[++i];
}
catch(TheVariousExceptions){ .... }
finally
{
    if(fs != null)
        fs.Close();
}

异常也会在 时处理Process.Start(),但可能要等到一段时间后才会调用,此时用户可能已经配置了程序并让它运行。所以我想先像上面一样运行检查。问题是,它没有考虑%PATH%到。

有任何想法吗?

4

2 回答 2

1

我想你必须手动完成。

您可以使用Environment.GetEnvironmentVariable来检索PATH. 然后,将其拆分为;s 并将结果保存在 a 中List。然后,您必须Combine使用文件名访问每个路径,并对File.Open生成的每个组合执行检查。

你确定值得做这些检查吗?

于 2012-09-18T07:28:30.997 回答
0

这就是我设法做到的方式。

static Process TestProc = new Process();
static ProcessStartInfo TestProcStart = new ProcessStartInfo();
try
{
    TestProcStart.WindowStyle = ProcessWindowStyle.Hidden;
    TestProcStart.FileName = args[++i];
    TestProc.StartInfo = TestProcStart;
    TestProc.Start();
    TestProc.Kill();
    Run = args[i];
}
catch(Win32Exception e)
{
    switch(e.NativeErrorCode)
    {
        case 2: Console.WriteLine("ERROR: File " + args[i] + " not found!"); return;
        case 5: Console.WriteLine("ERROR: Access denied to " + args[i] + "!"); return;
        default: Console.WriteLine("ERROR " + e.NativeErrorCode + ": " + e.Message); return;
    }
}
于 2012-09-18T12:26:30.843 回答