2012-06-04 17 views
5

Ho un VBScript che ho scritto che deve essere eseguito da un file MSI. Lo script viene eseguito correttamente quando l'eseguo all'interno di Windows da solo, tuttavia, quando l'eseguo dal programma di installazione ricevo il seguente errore come indicato nel file di registro:VBScript non verrà eseguito correttamente dal file MSI

Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2 

Lo script è qui sotto:

sub shell(cmd) 
    Set objShell = WScript.CreateObject("WScript.Shell") 

    objShell.Run("""" & cmd & """") 
    Set objShell = Nothing 
end sub 

set objFSO = CreateObject("Scripting.FileSystemObject") 

strcmd32 = "C:\Path\PathToExecutable.exe" 
strcmd64 = "C:\Path\PathToExecutable64.exe" 

if (objFSO.FileExists(strcmd32)) then 
    shell(strcmd32) 
else 
    shell(strcmd64) 
end if 

set objFSO = Nothing 

Come detto in precedenza, questo script funziona correttamente se viene eseguito al di fuori del contesto dell'installer. Il tipo di progetto di installazione è VS2010 Setup and Deployment Package (questo è ciò che il cliente desidera utilizzare e non posso usare altro). Qualche idea?

risposta

7

Nel sub "shell", ho rimosso il WScript dalla prima riga prima della chiamata a "CreateObject()". La linea modificata appare come segue:

'Note the absent reference to WScript on the call to CreateObject() 
Set objShell = CreateObject("WScript.Shell") 
+0

Gli oggetti WScript non sono supportati nei file VBS in esecuzione come azione personalizzata. Se è necessario utilizzare questo tipo di oggetto, il metodo sopra riportato è l'unico in funzione. Un altro lato, le azioni personalizzate VBS non sono la mia prima raccomandazione, ma tutto dipende dal tempo disponibile per la creazione del pacchetto di installazione. Le azioni personalizzate VBS presentano molti rischi, come il blocco antivirus o errori del motore Vscript e molti altri. Una DLL Win32 sarebbe la scelta migliore per un'azione personalizzata. –

+0

Fondamentalmente, ho questo script, quindi un altro script per creare collegamenti inclusi all'interno di un modulo di unione (i progetti di installazione e distribuzione non offrono la possibilità di collegarsi ai file all'interno dei moduli unione) e uno script che rimuove i suddetti collegamenti alla disinstallazione . Sono andato al percorso vbs per risparmiare tempo in quanto non ho tempo per imparare come creare una DLL di azioni personalizzate. –

3

Se si dispone di un semplice progetto include alcuni moduli unione e file delle applicazioni è possibile utilizzare uno strumento migliore, Advanced Installer. Per quello che ti serve puoi usare la versione gratuita, cioè creare un tipo di progetto "Semplice". L'aggiunta di moduli e file di unione non richiederà più di un minuto.

Ora arriva la parte più facile se ti sei completamente sbarazzato delle tue azioni personalizzate, per creare le scorciatoie che puoi andare alla pagina File e cartelle e utilizzando le opzioni del menu contestuale o la barra degli strumenti, puoi creare un external shortcut, che tu può configurare per puntare a un file dal modulo unione, o anche non dal pacchetto.

In questo modo è possibile creare un pacchetto di installazione molto più semplice, molto più semplice e non preoccuparsi della possibilità che le azioni personalizzate non vadano a buon fine.

+1

Buona raccomandazione, ma il mio cliente desidera utilizzare il progetto di installazione e distribuzione in quanto è ciò che il suo team conosce. E se avessi la mia scelta, probabilmente userò WiX poiché è ciò che mi è familiare. –

Problemi correlati