Tengo un VBScript que escribí que debe ejecutarse desde un archivo MSI. El script se ejecuta correctamente cuando lo corro dentro de Windows por su cuenta, sin embargo, cuando lo ejecuto desde el instalador me sale el siguiente error como se muestra en el archivo de registro:VBScript no se ejecutará correctamente desde el archivo MSI
Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2
el guión es el siguiente:
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
Como se dijo anteriormente, este script funciona bien si lo ejecuto fuera del contexto del instalador. El tipo de proyecto de instalación es el paquete de instalación y despliegue VS2010 (esto es lo que el cliente desea usar y no puedo usar nada más). ¿Algunas ideas?
Los objetos WScript no son compatibles con los archivos VBS que se ejecutan como una acción personalizada. Si alguna vez necesita usar este tipo de objeto, el método anterior es el único que funciona. Por otro lado, las acciones personalizadas de VBS no son mi primera recomendación, pero todo depende del tiempo que tenga disponible para crear el paquete de instalación. Las acciones personalizadas de VBS vienen con muchos riesgos, como bloqueo de antivirus o fallas de motor vscript y muchos otros. Una DLL de Win32 sería la mejor opción para una acción personalizada. –
Básicamente, tengo este script, luego otro script para crear accesos directos que se incluyen dentro de un módulo de fusión (los proyectos de instalación y despliegue no ofrecen la posibilidad de vincular archivos dentro de los módulos de fusión) y un script que elimina dichos accesos directos al desinstalar . Fui por la ruta vbs para ahorrar tiempo, ya que no tengo tiempo para aprender a crear una DLL de acción personalizada. –