|
■No32692 (ガチンコ さん) に返信
自己解決しましたので、報告させて頂きます。
常に新しいプロセスで起動させるため、関連付けられたアプリケーションの実行パスを
Process.Startメソッドに加えることに致しました。
なお、関連付けられたアプリケーションの取得は、
Win32APIのFindExecutable関数にて取得しました。
不具合あるらしいけど、今のところ動いてるので大丈夫かな・・。
もしなにかあったら、レジストリからも取得できるようなので、そちらに変更したいと思います。
------------------------------------------------------------
/// <summary>
/// Win32 API FindExecutable関数
/// ファイルに関連付けられた実行ファイルを取得します。
/// </summary>
/// <param name="lpFile">ファイル名文字列へのポインタ</param>
/// <param name="lpDirectory">既定ディレクトリ文字列へのポインタ</param>
/// <param name="lpResult">返される実行可能ファイル文字列を保持するバッファへのポインタ</param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("shell32.dll")]
public static extern int FindExecutable(string lpFile, string lpDirectory, System.Text.StringBuilder lpResult);
〜
//結果を受け取るためのStringBuilderオブジェクト
StringBuilder exepath = new StringBuilder(256);
//fileNmに関連付けられた実行ファイルのパスを取得する
if (FindExecutable(filenm, null, exepath ) <= 32)
{
return false; //取得失敗
}
//指定されたファイルを起動
using(Process p = Process.Start(exepath.ToString(), filenm))
{
//終了まで待ってから
p.WaitForExit();
}
//hogeメソッドを起動
hoge();
------------------------------------------------------------
|