Azure:无法启动运行vbs启动任务的云服务

时间:2013-07-26 11:05:08

标签: asp.net-mvc iis azure vbscript windows-server-2012

出于某些特定目的,我需要在实例上安装一些字体。当我选择StartUp Task来实现这个目标时,这并不奇怪。我已将服务定义配置如下:

<Startup>
  <Task commandLine="Fonts\InstallFonts.vbs" executionContext="elevated" taskType="simple" />
</Startup>

这里没什么特别的。点击并运行,它失败了。但是,如果我将commandLine更改为仅包含废话的cmd文件,即“echo test”,则实例将在没有ado的情况下运行。所以我的脚本必须存在一些问题:

Const FONTS = &H14&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(CreateObject("Scripting.FileSystemObject").GetAbsolutePathName("."))
Set fontFolder = objShell.Namespace(FONTS) 

Set rxTTF = New RegExp
rxTTF.IgnoreCase = True
rxTTF.Pattern = "\.ttf$"

Set fso = CreateObject("Scripting.FileSystemObject")

FOR EACH FontFile IN objFolder.Items()
    IF rxTTF.Test(FontFile.Path) THEN
        IF NOT fso.FileExists(fontFolder.Self.Path+"\\"+FontFile.Name) THEN
         FontFile.InvokeVerb("Install")
        END IF
    END IF
NEXT

该脚本应该没有错误,因为我已在本地或通过RDP在Azure上测试它。

奇怪的是,当我把它放在启动时,角色就不会启动了。实例只是保持回收,最后说“我不健康”。即使我将vbs弃用到一行代码 - 第一行Const FONTS =&amp; H14&amp;,它就不会启动。即使我将vbs的调用包装到cmd文件中,即放置类似“cscript / B file.vbs”的内容,它也不会运行。

所以我得出的结论是,脚本和Windows Azure监视器之间的通信一定存在问题。我不确定,但我认为监视器可能会将运行脚本作为失败的任务。此外,我想知道启动任务是否有任何超时,这应该是问题,因为脚本可以保证没有UI交互阻止该过程。

任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:1)

我相信您必须拥有但仅仅是为了确认,您是否检查过InstallFonts.vbs文件是否与包一起导出?我的意思是“复制到输出目录”设置为“如果更新则复制始终/复制”?

这很可能无法找到您的文件。

答案 1 :(得分:1)

您需要将cmd文件编写为启动任务。在cmd文件中,可以使用命令行工具cscript调用vbs文件。 Azure启动只能编译命令行工具。

答案 2 :(得分:1)

天啊,我终于解决了这个问题。

虽然编译器通常做得相当不错,但它允许使用子文件夹作为命令源,我的意思是“Subfolder \ command.cmd”,它总是不起作用。我已经看过人们把我们在cmd中做的任何事情放在commandLine属性中的例子,例如“copy fileA fileB”,它确实有效。但至于vbs,你需要谨慎。到现在为止,我仍然不知道封面下有什么,但路径上应该有一些问题。解决方案绝对简单,而不是让子文件夹工作整洁,只需将命令文件保留在根文件夹中就像大多数人一样:

<Startup>
  <Task commandLine="InstallFonts.vbs" executionContext="elevated" taskType="simple" />
</Startup>

谢谢你们,库纳尔。 :)