Windows サービスから AutoCAD を起動する必要があります。このサービスは、私のサービスを実行するためだけに作成された「特別な」ドメイン ユーザーで実行されています。このユーザーはマシンの管理者であり、このユーザーがマシンに AutoCAD 2014 をインストールしました。C# から AutoCAD 2014 を起動するために使用しているコード:
IAcadApplication acadApp;
try
{
var acadType = Type.GetTypeFromProgID("AutoCAD.Application.19", true);
acadApp = (AcadApplication) Activator.CreateInstance(acadType, true);
}
catch (Exception ex)
{
// do fancy error handling here
}
AutoCAD COM ライブラリへの参照があります。(Interop.AutoCAD.dll) ログインしているユーザーで上記のコードを実行すると、AutoCAD が起動し、SendCommand で必要なことを何でも実行できます。それをサービスに入れると(Updateを参照)、「特別な」ユーザーでサービスを開始すると、CreateInstanceコマンドはこれをスローします:
{"CLSID {BD0DEB94-63DB-4392-9420-6EEE05094B1F} を持つコンポーネントの COM クラス ファクトリの取得に失敗しました: 80080005 サーバーの実行に失敗しました (HRESULT からの例外: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))。"}
問題は、acad.exe が起動しますが、約 44 MB のメモリの消費を停止し、1 ~ 2 分後に例外が発生することです。通常、acad.exe は 112 MB のメモリを消費して起動します。ログインしたユーザーの名前でサービスを実行すると、すべてが期待どおりに機能します。両方のユーザーが同じユーザー グループ、同じドメインに属しています。したがって、私のコードは基本的に機能します。しかし、目標は、AutoCAD を実行できるサーバー プログラムを用意することです。このシナリオでサーバー上で AutoCAD を実行するにはどうすればよいですか? ネット上のいくつかの投稿によると、これはアクセス権の問題が原因である可能性があります。しかし、「特別な」ユーザーにどのような権限を与える必要がありますか?
更新: オートデスクの公式フォーラムに投稿したように、AutoCAD をサービスから起動できません。ユーザーは問いません。公式フォーラムの誰かが、AutoCAD はサービスから実行できないと述べています。これ、またはライセンスに関する何かがこの動作を引き起こす可能性があります...ただし、サービスからAutoCADを起動するソリューションにはまだオープンです。(より正確には、Windows サービスがホストする WCF です。)
UDPATE2 : 問題の解決策が見つからず、AutoCAD が有用なエラー メッセージで停止しないため、Windows サービスを使用せずにこれを解決しました。現在、コマンド プロンプト ソリューションで WCF ソリューションをホストし、ユーザーとして実行しています。これはとてつもなく醜い。それがもたらす問題は数え切れません。しかし、締め切りは締め切りです...私はまだ本当の解決策を受け入れています。