1

My Azure role startup task is invoking a .cmd file:

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

The .cmd file contains invokation of regsvr32:

//startup.cmd
regsvr32 PathToMyComServer\MyComServer.dll

for registering a 32-bit in-proc COM server.

Now on 64-bit systems there're two versions of regsvr32 - one in SysWOW64 folder for 32-bit COM servers and one in System32 folder for 64-bit COM servers. Of course only the matching version of regsvr32 can be used for any given in-proc COM server.

When I login onto my development Windows 2008 box and run regsvr32 from a command line the 64-bit version is invoked, but when my startup task runs - both in Compute Emulator and in the live cloud - the 32-bit version is invoked and properly registers my in-proc COM server. This puzzles me.

Why is 32-bit version of regsvr32 invoked in Azure startup task?

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 -> 启动 32 位版本的 regsvr32 psexec -s regsvr32 -> 启动 64 位版本的 regsvr32

在这两种情况下,psexec 都是在运行 Win2K2008 64 位的 Azure VM 上以 32 位模式启动的。

这就是为什么我建议尝试在真实用户上下文中启动启动任务的原因,因为在我的 64 位机器上,有限的用户权限,启动 regsvr32.exe 实际上会启动 32 位 REGSVR32,并且使用管理员用户上下文相同的命令会启动 64 位 regsvr32。因为启动任务不是在真实用户上下文中启动的,我怀疑这可能是一个原因。

另一个选项是您也可以使用“PsExec -s”选项来启动 64 位版本的 regsvr32。

于 2012-05-05T22:28:41.707 回答