2012-05-05 21 views
1

我Azure角色的启动任务调用一个.cmd文件:为什么从Azure启动任务中调用32位regsvr32?

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

.cmd文件中包含的regsvr32 invokation:

//startup.cmd 
regsvr32 PathToMyComServer\MyComServer.dll 

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

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

当我登录到我的开发的Windows 2008箱,并从一个命令行的64位版本被调用运行regsvr32,但是当我启动任务运行 - 无论是在计算仿真和实时云 - 在32位版本被调用并正确注册我的进程内COM服务器。这让我感到困惑。

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

+1

推测处理启动文件的应用程序是32位的。但我不知道为什么会这样。如果您只需要一种解决方法,请指定%SystemRoot%\ sysnative \ regsvr32而不仅仅是regsvr32。 –

+0

我有兴趣知道答案,所以想请求,如果你有你的问题解决了,什么是根本原因..谢谢.. – AvkashChauhan

+0

@Avkash:我目前没有可解决的问题 - 系统只是这样的行为,我只是考虑到了这一点。 – sharptooth

回答

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。由于启动任务不是在真正的用户环境中启动的,我怀疑这可能是其中一个原因。

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