1

Azure ロールのスタートアップ タスクが .cmd ファイルを呼び出しています。

<Startup>
    <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple"/>
</Startup>

.cmd ファイルには、次の呼び出しが含まれていますregsvr32

//startup.cmd
regsvr32 PathToMyComServer\MyComServer.dll

32 ビットのインプロセス COM サーバーを登録するため。

現在、64 ビット システムには 2 つのバージョンがあります。1 つregsvr32は 32 ビット COM サーバー用の SysWOW64 フォルダーにあり、もう 1 つは 64 ビット COM サーバー用の System32 フォルダーにあります。もちろんregsvr32、任意のインプロセス COM サーバーで使用できるのは、一致するバージョンの だけです。

開発用の Windows 2008 ボックスにログインしてregsvr32コマンド ラインから実行すると、64 ビット バージョンが呼び出されますが、スタートアップ タスクを実行すると (Compute Emulator とライブ クラウドの両方で)、32 ビット バージョンが呼び出され、適切に登録されます。私のインプロセスCOMサーバー。これは私を困惑させます。

32 ビット バージョンのregsvr32が Azure スタートアップ タスクで呼び出されるのはなぜですか?

4

1 に答える 1

0

以下のリンクで説明されているように、スタートアップ タスクをリアル ユーザー コンテキストで実行してみてください。これにより、この問題が解決するはずです。

http://www.davidaiken.com/2011/01/19/running-azure-startup-tasks-as-a-real-user/

Azure VM で、PxExec ツールを使用して Regsvr32 を起動しようとしました

psexec regsvr32 -> regsvr32 の 32 ビット バージョンを起動します psexec -s regsvr32 -> regsvr32 の 64 ビット バージョンを起動します

どちらの場合も、psexec は、Win2K2008 64 ビットを実行している Azure VM で 32 ビット モードで起動されました。

これが、実際のユーザー コンテキストでスタートアップ タスクを起動することを提案した理由です。私の 64 ビット マシンでは、ユーザー権限が制限されているため、regsvr32.exe を起動すると実際に 32 ビット REGSVR32 が起動され、管理者ユーザー コンテキストでは同じコマンドで 64 ビット regsvr32 が起動されるからです。スタートアップ タスクは実際のユーザー コンテキストでは起動されないため、これが 1 つの理由であると思われます。

別のオプションとして、「PsExec -s」オプションを使用して regsvr32 の 64 ビット バージョンを起動することもできます。

于 2012-05-05T22:28:41.707 に答える