2013-07-26 83 views
2

对于某些特定目的,我需要在实例上安装一些字体。当我选择StartUp Task来实现这一目标时,这并不令人惊讶。我已将服务定义配置如下:Azure:无法启动云服务运行vbs启动任务

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

这里没什么特别的。点击并运行,失败。但是,如果我将commandLine更改为只包含无意义的cmd文件,即“回显测试”,则该实例将不会运行。因此,必须有一些问题,我的脚本:

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 

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

奇怪的是,当我把它放在启动时,角色就不会启动。该实例只是继续回收,最后说“我不健康”。即使我将vbs弃于一行代码中 - 第一行Const FONTS = & H14 &,它只是不会启动。即使我将vbs的调用包装到一个cmd文件中,也就是放入“cscript/B file.vbs”之类的东西,它也不会运行。

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

任何想法将不胜感激。

回答

1

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

虽然编译器通常做得不错,但它允许使用子文件夹作为命令的来源,我的意思是像“Subfolder \ command.cmd”这样的东西,它不会总是工作。我看过一些例子,人们把我们在cmd中做的任何事情放在commandLine属性中,比如“copy fileA fileB”,它真的起作用。但对于vbs,你需要谨慎。到目前为止,我仍然不知道封面内容是什么,但路径应该存在一些问题。解决的办法是绝对简单的,而不是做了整洁的子文件夹的工作,刚刚离开的命令文件中的根文件夹像大多数人那样:

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

谢谢你们大家一样,注:Kunal。 :)

+0

很高兴!它是解决:) –

1

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

这是非常可能的,它无法找到您的文件。

+0

这是复制,如果更新。另外我在发布之前手动检查了两个文件之间的一致性。顺便说一下,一些unicode文件名(字体)在发布后遭到破坏。这很奇怪,但是在我将命名改为标准字母后,一切都会好起来的。 –

1

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

+0

正如写在帖子中,我也试过,但事情似乎没有奏效。事实上,如果我根本没有调用vbs,那就没问题了。我猜想VB脚本引擎的调用方式可能存在一些问题。 –