Windows Azure Cloud Service (24) 使用Startup注册COM组件(上)

简介:

Windows Azure Platform 系列文章目录

 

  如果我们想把一个应用程序迁移到Winodows Azure平台上,还会遇到这样的问题:传统的Web Site往往使用了许多"老"的COM组件。这样是不是意味着我必须在每个Azure计算节点(Azure VM)上都手工注册一遍COM组件(比如远程桌面连接,然后regsvr32?,这样也太麻烦了吧...)其实Windows Azure提供了role start up功能,方便我们在云平台注册COM组件。

  1.使用VS2010新建一个Windows Azure项目,并且添加一个Web Application(过程略)

  2.假设我们有一个C++项目,能够生成名为LegacyCOM.dll,这个dll有一个方法叫做Greeting()。

  具体调用是这样的:先实例化这个dll对象,然后调用Greeting方法,传入一串string进去,然后这个dll会返回一串string。

  Azure Project会根据Web服务器的操作系统的版本来注册不同版本的LegacyCOM.dll,比如探测到服务器端64位的Win7操作系统,则会自动注册64位的LegacyCOM.dll。

  3.我们在WebRole Solution里新建两个文件夹,分别叫"amd64"和"x86"。

  4.将64位版本的LegacyCOM.dll复制"amd64"文件夹下,将32位版本的dll复制到"x86"文件夹下。

  5.将这两个dll包含在VS项目里(include in project),并且将属性中的"Copy to Output Directory"设置成"Copy always"。

  6.在Web Application工程下新建文件,文件夹设置成Register.cmd

  7.Register.cmd的内容如下,主要的功能是在Azure VM上注册这个dll组件

echo off
regsvr32.exe /s "%~dp0%PROCESSOR_ARCHITECTURE%\LegacyCOM.dll"

  如果发现服务器OS是64位的,Register.cmd会注册amd64文件夹下的dll,否则注册x86下的dll

 

  8.将Register.cmd的属性中的"Copy to Output Directory"设置成"Copy always"。

  9.修改ServiceDefinition.csdef,在ServiceDefinition节点里添加Startup任务

其中,commandLine指向我们写好的cmd文件。需要注意的是,这个脚本必须是以ANSI格式编码的。

executionContext:脚本的执行上下文,也就是这个脚本的执行权限。可以选项包括:

  • limited:默认值。表示使用和当前Role所在进程相同的权限来执行这个脚本。
  • elevated:表示使用本机管理员权限来执行这个脚本。当脚本进行了系统级别的操作,比如对IIS进行配置,就必须指定为elevated。

TaskType的可选值有三种,含义如下:

  • Simple:默认值,只有当Task执行完成之后系统才会执行下一个Task。当所有Task执行完成之后才会开始启动Role。
  • Background: startup任务在后台运行,系统不会等待Task执行完成就开始启动Role
  • Foreground: 和Background方式类似,系统不会等待Task执行完成就开始启动Role。不同之处在于,只有当所有Task都执行完成之后Role才可能被重启。

10.在Default.aspx添加TextBox,Button和Label,并且在Button_Click添加如下代码:

LegacyCOMLib.Helper helper = new LegacyCOMLib.Helper();
Message.Text = helper.Greeting(Username.Text);

11.按F5运行VS工程,在pre-build过程中,Azure Project会先侦察CSDEF是否有Startup节点,如果有的话则执行CommandLine指向的cmd文件。我们这里的cmd文件的功能是:根据操作系统的版本,自动注册所对应的dll。并且会弹出窗口,表明注册成功。我们按"OK",让项目继续执行。

12.在aspx页面里,用户在textbox输入name的值,然后按"Greet me!",dll会调用自动返回一串字符串并且显示在页面上。

  

通过Startup功能,用户还可以通过系统命令修改系统配置,或者通过PowerShell执行更加复杂的操作(比如使用InstallUtil注册Windows Service)。另外和通过远程桌面手动修改系统配置不同,Startup功能会在系统迁移、故障恢复的时候自动执行,因此可以作为持久化的操作。

 


本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/03/13/2394484.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java Unix 应用服务中间件
使用java service wrapper把windows flume做成服务
使用java service wrapper把windows flume做成服务
|
6月前
|
关系型数据库 MySQL Windows
windows安装mysql报错Remove of the Service Denied!
windows安装mysql报错Remove of the Service Denied!
|
9月前
|
C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(上)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
|
9月前
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
XML Java Unix
将JAVA打包生成的可运行jar文件注册成windows服务
将JAVA打包生成的可运行jar文件注册成windows服务
330 0
|
Windows
『Consul』Consul数据持久化配置并且注册为Windows服务
📣读完这篇文章里你能收获到 - Consul数据持久化配置并且注册为Windows服务
806 0
『Consul』Consul数据持久化配置并且注册为Windows服务
|
4月前
|
Windows Python
python操作windows组件
python操作windows组件
23 0
|
4月前
|
XML Arthas Java
Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启
Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启
106 0
|
4月前
|
监控 安全 API
7.2 Windows驱动开发:内核注册并监控对象回调
在笔者上一篇文章`《内核枚举进程与线程ObCall回调》`简单介绍了如何枚举系统中已经存在的`进程与线程`回调,本章`LyShark`将通过对象回调实现对进程线程的`句柄`监控,在内核中提供了`ObRegisterCallbacks`回调,使用这个内核`回调`函数,可注册一个`对象`回调,不过目前该函数`只能`监控进程与线程句柄操作,通过监控进程或线程句柄,可实现保护指定进程线程不被终止的目的。
29 0
7.2 Windows驱动开发:内核注册并监控对象回调
|
6月前
|
Windows
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
106 0