【发布时间】:2013-07-26 11:05:08
【问题描述】:
出于某些特定目的,我需要在实例上安装一些字体。当我选择 StartUp Task 来实现这个目标时,这并不奇怪。我已将服务定义配置如下:
<Startup>
<Task commandLine="Fonts\InstallFonts.vbs" executionContext="elevated" taskType="simple" />
</Startup>
这里没什么特别的。单击并运行,它失败了。但是,如果我将 commandLine 更改为包含废话的 cmd 文件,即“echo test”,则该实例将毫不费力地运行。所以我的脚本一定有问题:
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 = &H14&,它也不会启动。即使我将 vbs 的调用包装到一个 cmd 文件中,即放入类似“cscript /B file.vbs”之类的东西,它也不会运行。
所以我的结论是,脚本和 Windows Azure 监视器之间的通信一定存在一些问题。我不确定,但我认为监视器可能会将正在运行的脚本视为失败的任务。此外,我想知道启动任务是否有任何超时,但这应该是问题所在,因为脚本可以保证没有UI交互阻塞进程。
任何想法将不胜感激。
【问题讨论】:
标签: asp.net-mvc iis azure vbscript windows-server-2012