EDIT 5/11/2013 : この質問は、当初、REGASM を使用せずに .NET のコードを使用して COM オブジェクトをプログラムで登録する方法を尋ねていました。Yahia の回答は、DLL をプログラムで登録する方法と EXE の両方をカバーしています。
元の質問: 現時点では、既定のバージョンを設定する (regasm を使用してレジストリ エントリを追加する) ときに、UI から呼び出して COM でソフトウェアを登録/登録解除するバッチ スクリプトがあります。スクリプトが失敗した場合にプログラムが失敗を認識しないという問題が発生しているため、バッチ スクリプトを使用したくありません。この問題に対処する方法はいくつかありますが、必要がない場合にコードからバッチ スクリプトを呼び出すという概念は気に入らないので、マネージ コードを使用してソフトウェアを COM に登録する方法に切り替えたいと考えています。
可能だと仮定すると、C# から COM オブジェクトを登録/登録解除するにはどうすればよいですか? グーグルは、インストーラーパッケージからこれを行う方法を見つけるか、regasmを使用するように指示するだけですが、プログラムでこれを行う方法や、それが可能かどうかについての情報は見つかりません.
これについてご支援いただきありがとうございます。
EDIT 5/10/2013 : EXE を COM オブジェクトとして登録することは、DLL を登録することと同じではないようです。.NET (PInvoke は問題ありません) で EXE を COM オブジェクトとして (32 ビット レジストリに) 登録するプログラム的な方法はありますか? これは現在、スクリプトで実行している方法です。アプリと REGCMD 変数は省略形です。
set app=%PathToTheExecutable%
set REGCMD=%PathTo32BitRegExe%
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm" /tlb /codebase %app%
%REGCMD% ADD HKCR\CLSID\{app-guid}\LocalServer32 /ve /t REG_SZ /d %app% /f
%REGCMD% DELETE HKCR\CLSID\{app-guid}\InprocServer32 /f
基本的に、実行可能ファイルで regasm を実行し、exe を LocalServer32 として追加し、InprocServer として関連付けられているエントリを削除します。コードから regasm を呼び出すことなく、プログラムでこれを行うことは可能ですか?