如何在云服务虚拟机上安装软件、下载文件?

云服务是通过两个文件进行发布的,一个是cspkg,包含所有程序代码,一个是cscfg,包含配置信息。如果要在云服务的虚拟机上安装软件或者拷贝文件,简单的做法是把要装的软件和文件打包在cspkg里面,然后在csdef里面定义启动脚本,进行软件的自动化安装或者文件拷贝。下面看一个简单的例子

比如我们要把一个test.dll文件拷贝到目标虚拟机的系统目录下,而不是仅仅放在Webrole/worker role的缺省目录下,那么我们需要这样做:

首先,把这个dll放到Azure Role的代码目录内,比如web role/worker role的根目录

如何在云服务虚拟机上安装软件、下载文件?

查看文件属性,确保生成操作为“内容”

如何在云服务虚拟机上安装软件、下载文件?

如果当前是workerrole,还需要将待拷贝的文件复制属性改为“较新则复制”。这会让该文件复制到bin目录下,而Bin目录会成为worker role的approot。而Web role则不需要修改,因为Web role的app root就是项目根目录


此时如果我们打包该项目,然后将输出的cspkg解压缩,可以发现该文件出现在了目标role的approot目录下

如何在云服务虚拟机上安装软件、下载文件?

接下来,我们需要让Azure进行文件的自动拷贝。打开项目的csdef文件,找到相应Role的定义,添加<startup>段落,定义拷贝命令

<WebRole name="GuestBook_WebRole" vmsize="Small">
....
....
....
    <Startup>
      <Task commandLine="copy test.dll %windir%" executionContext="elevated" taskType="simple" />
    </Startup>
</WebRole>
其中,executionContext是执行权限。如果是elevated,表示以管理员权限执行,如果是limited,则以普通用户权限执行

至此,我们再发布该应用,就会实现test.dll的自动拷贝。如果要安装应用程序,可以把startup定义里面的commandline换位应用的静默安装命令。一般的应用都支持静默安装,命令一般为 xxxx.exe /silent。具体参数可以通过xxxx.exe /?查询

有时候commandline没有这么简单,不能写到一行里面。此时最好单独创建一个setup.cmd脚本文件,将需要执行的命令写好。然后在startup的commandline里面写setup.cmd.该脚本文件的放置方法跟前面test.dll相同。


由于每次发布都需要上传cspkg,显然cspkg不能太大。如果要打包的安装程序或者文件太大,那么不建议把他们和cspkg打包在一起,而是事先上传到Azure的Blob存储上,然后在startup脚本里面进行文件的下载

把文件进行事先上传很简单。那么怎么在startup脚本里面进行下载呢?我们需要一个工具进行文件的下载

将这里的压缩包(http://download.csdn.net/detail/shaunfang/5390215)解压到本地Azure项目的目标Role根目录下,确保文件属性的生成操作为“内容”。如果是worker role,需要修改复制属性为“较新则复制”

如何在云服务虚拟机上安装软件、下载文件?

这里包括几个文件,分别是Blob的客户端dll,下载和解压缩脚本等

然后,在role根目录下创建一个download.bat的文件,里面填写下载、解压缩和安装代码:

cmd /c util\wash.cmd blob download "ImageMagick-6.8.0-vc9.zip" "ImageMagick-6.8.0-vc9.zip" phpsetup filestore "xxxxxxxxxx"
cscript /NoLogo util\unzip.vbs "ImageMagick-6.8.0-vc9.zip" .
copy ImageMagick-6.8.0-vc9\* "%ProgramFiles(x86)%\PHP\v5.3\"
其中,第一行是进行文件的下载。"ImageMagick-6.8.0-vc9.zip"是文件名,phpsetup是container名,filestore是存储账号名,最后是存储的密钥
第二行是zip解压缩

第三行是文件拷贝


之后,修改startup的commandline为download.bat即可。在正式发布服务前,可在本地先手动执行下download.bat,看看能否正确下载安装


关于startup的详细说明,可以参考http://msdn.microsoft.com/en-us/library/windowsazure/gg456327.aspx

你可能感兴趣的:(下载文件)