-1

Process.Start()イベント時にユーザー定義ファイルで実行される CLI プログラムを作成しています。これはを尊重します%PATH%が、尊重File.Open()しません。

基本的には、プログラムを立ち上げると、いろいろチェックしています。私が望むチェックの 1 つは、このファイルが存在し、現在のユーザー 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で分割し、結果を。に保持し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 に答える