我正在编写一个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%
。
有什么想法吗?
答案 0 :(得分:1)
我认为你必须手动完成。
您可以使用Environment.GetEnvironmentVariable
来检索PATH
。然后,将其拆分为;
,并将结果保存在List
中。然后,您必须使用文件名Combine
每个路径,并对生成的每个组合执行File.Open
检查。
你确定值得做这些检查吗?
答案 1 :(得分: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;
}
}