1. ホーム
  2. シーピー

C# win32 関数 FindExecutable の使用法

2022-03-20 15:52:46

関数のシグネチャです。

Win32の関数FindExecutableは、C#では次のようなメソッドシグネチャを持ちます。

[DllImport("shell32.dll")]
static extern IntPtr FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);

また、署名は次のようになります。

[DllImport("shell32.dll")]
static extern int FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);

このWin32関数が行うこと

指定されたファイルのデフォルトハンドラーパスを取得するために使用します。

例えば、E: \testbelt2.rfa というファイルをダブルクリックで実行する場合、そのファ イルを実行するデフォルトのプログラムが誰なのかを知るには、この関数を使用し て取得することができます。

この例のファイルの拡張子は.rfaで、そのwin32関数で、どのプログラムから起動しているのかを調べると、D: \Program FilesAutodesk2019Revit 2019㊞Revit.exe となり、拡張子 .rfa は Revit 2019 というソフトから起動していることがわかります。

本機能の使用例です。

var sb = new StringBuilder(1024);
Win32Api.FindExecutable(@"E:\test\belt2.rfa", null, sb);
var exePath = sb.ToString();

このメソッドを使用する際の注意事項

1. StringBuilderの場合、長さを設定する必要があります。例えば、1024。

2. パラメータ "lpDirectory" には、NULLを渡す必要があります。

これを行わないと、次のような例外が発生することがあります。

Hosted Debug Helper "FatalExecutionEngineError": "An error was encountered while running. The address of this error is 0x5762ffef on thread 0x4bc4. The error code is 0xc0000005. This error may be a bug in the CLR, or a bug in an unsafe or unverifiable part of the user's code. common sources of this bug include user errors in the processing of COM-interop or PInvoke seals, which can corrupt the stack."

お食事をお楽しみください。