2012-01-04 87 views
2

我非常高興,我必須使用VBS編寫InstallShield 2010 LE自定義操作。我沒有VBS經驗,所以我基本上把我找到的代碼片段放在一起。在VBS中獲取Common Documents文件夾

我需要抓住Common Documents文件夾(CSIDL_COMMON_DOCUMENTS)。它沒有在WScript.Shell.SpecialFolders中定義(雖然All Users Desktop是)。我發現,試圖鏈接到系統DLL一些示例代碼:

Private Declare Function SHGetFolderPath Lib "shfolder.dll" _ 
Alias "SHGetFolderPathA" _ 
    (ByVal hwndOwner As Long, _ 
    ByVal nFolder As Long, _ 
    ByVal hToken As Long, _ 
    ByVal dwReserved As Long, _ 
    ByVal lpszPath As String) As Long 

但是,當我嘗試VbsEdit當中運行它,我得到的第一行出現以下錯誤:

Microsoft VBScript compilation error: Expected end of statement

有任何想法嗎?

+0

更容易在將它作爲從通常的InstallShield一個paraneter。這樣你就可以控制你在哪裏從一個地方做什麼。 – 2012-01-04 18:01:32

+0

Installshield幫助說:「VBScript函數不能從自定義操作採取參數。」我會怎麼做? – japreiss 2012-01-04 18:26:59

+0

嗯不知道,但你可以作弊和使用Session.Property。所以你在腳本外部設置一個屬性docFolder,然後在函數內部使用它並使用它。 – 2012-01-07 16:27:56

回答

8

被盜從here

Const CSIDL_COMMON_DOCUMENTS = &h2e 
    Dim objShell : Set objShell = CreateObject("Shell.Application") 
    WScript.Echo objShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path 

輸出:

C:\Documents and Settings\All Users\Documents 
+0

很好,謝謝! – japreiss 2012-01-04 18:34:24

+0

從技術上講,這段代碼在自定義操作中不起作用,因爲在作爲MSI CA運行時沒有可用的WScript對象。默認對象是Session對象而不是WScript或CScript。 – 2012-01-05 15:47:06

0

忽略的事實是VBScript的自定義操作是非常有問題的,你可以問WindowsInstaller爲COMMONAPPDATAFOLDER的位置。

CommonAppDataFolder Property

commonAppDataFolder = session.Property("CommonAppDataFolder") 
+0

是什麼讓他們如此問題?我已經對與VBS合作感到惱火,我想要一些很好的理由來切換! – japreiss 2012-01-05 15:18:50

+0

請閱讀下面的鏈接,瞭解原因。至於替代方案,我在我的博客上討論瞭如何使用WiX DTF編寫乾淨的託管代碼自定義操作,將它們封裝到WiX合併模塊中,然後在InstallShield LE項目中使用。 IS LE在安排CA的地方非常有限,我的解決方案可以解決所有這些問題,從而獲得MSI的全部權力.http://blogs.msdn.com/b/robmen/archive/2004/05/ 20/136530.aspx – 2012-01-05 15:45:22

相關問題