このコードでOLEオブジェクト(つまり、自動化によるMatlab)を作成して使用しようとするWindowsサービスがあります:
var type = Type.GetTypeFromProgID("matlab.application");
var matlab = Activator.CreateInstance(type);
私のマシン (Win7 x64、シングル ユーザー) ではすべて問題なく動作しますが、運用サーバー (Win 2008 R2 Datacenter SP1) では問題があります。通常のexeファイルとしてサービスを開始するとそこで動作します(この可能性があります)が、サービスとして開始しようとすると、例外が返されます:
System.Runtime.InteropServices.COMException (0x80080005): CLSID {AC62BA4E-6ED9-4F33-9967-B260419E5EAD} を持つコンポーネントの COM クラス ファクトリの取得は、次のエラーのために失敗しました: 80080005 サーバーの実行に失敗しました (HRESULT からの例外: 0x80080005 (CO_E_SERVER_EXEC_FAILURE) )))。
私は試した:
- システム/管理者/別のユーザー アカウントでサービスを開始する
- dcomcnfg ユーティリティで構成を確認します (実際には役立ちます。別のエラーが発生しましたが、「matlab.automation」dcom オブジェクトのすべての権限が付与されています)
- 「Activator.CreateInstance」の呼び出し後、メモリ内に Matlab.exe プロセスがありますが、ハングするだけです..
では、Windows サービスから Matlab オートメーション オブジェクトを使用するにはどうすればよいですか?
どうもありがとう!
アップデート
おそらくそれが役立つでしょう-本番サーバーはAmazon EC2インスタンスであるため、ターミナルサーバーもあります。多分これは問題になる可能性がありますか?以前はミューテックスに問題があり、グローバルミューテックスを作成することで解決したため..
更新 2
例外は常に 120 秒 (正確) に発生するため、OLE クライアントは CoRegisterClassObjects の呼び出し、またはおそらく他の呼び出しを認識していないようです。いずれにせよ、Activator.CreateInstance の呼び出しと例外の間の遅延は正確に 120 秒です。