为什么从Azure启动任务中调用32位regsvr32?

时间:2012-05-05 08:51:10

标签: windows com azure 32bit-64bit windows-server-2008-r2

我的Azure角色启动任务正在调用.cmd文件:

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

.cmd文件包含regsvr32的调用:

//startup.cmd
regsvr32 PathToMyComServer\MyComServer.dll

用于注册32位进程内COM服务器。

现在在64位系统上有regsvr32的两个版本 - 一个位于32位COM服务器的SysWOW64文件夹中,另一个位于64位COM服务器的System32文件夹中。当然,只有regsvr32的匹配版本可以用于任何给定的进程内COM服务器。

当我登录到我的开发Windows 2008框并从命令行运行regsvr32时,会调用64位版本,但是当我的启动任务运行时 - 无论是在Compute Emulator还是在实时云中 - 32调用-bit版本并正确注册我的进程内COM服务器。这让我很困惑。

为什么在Azure启动任务中调用了32位版本的regsvr32

1 个答案:

答案 0 :(得分:0)

请尝试按照以下链接中所述的实际用户上下文运行启动任务,这应该可以解决此问题:

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

在Azure VM上,我尝试使用PxExec工具启动Regsvr32

  

psexec regsvr32 - &gt;推出32位版本的regsvr32   psexec -s regsvr32 - &gt;推出64位版本的regsvr32

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

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

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