2013-07-26 82 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腳本引擎的調用方式可能存在一些問題。 –