Domanda

Non riesco a modificare un MSI di Windows Installer per eseguire un file batch dopo l'installazione dell'output primario.L'ho cercato e ho trovato molti suggerimenti, ma niente che funzioni.

Aggiungi un'azione personalizzata
Le azioni personalizzate possono essere solo file eseguibili.Un file batch non è eseguibile.

Creare un eseguibile Windows Scripting Host che esegua il file batch
Molte persone hanno provato a farlo, anche su COSÌ, e nessuno è riuscito a farlo funzionare.

Utilizza WIX o InstallShield
Non ho il tempo o l'autorità per cambiare la tecnologia degli installatori aziendali.

Modifica il file .msi con Orca e aggiungi una proprietà personalizzata, quindi un'azione personalizzata, quindi modifica InstallExecuteSequence, ...
Lo sto provando da ore e ho creato solo programmi di installazione che generano un errore di sistema quando li eseguo.
È stato utile?

Soluzione

Quello che hai detto sopra non è corretto:

Le azioni personalizzate possono essere solo file eseguibili.Un file batch non è eseguibile.

Le azioni personalizzate (anche senza strumenti come InstallShield) possono essere basate su .EXE, VBScript, JScript o DLL.Se scrivi una DLL, puoi scrivere qualunque codice desideri chiamare un file batch o apportare le modifiche che desideri al sistema: non ci sono limiti.

Aggiornamento:un esempio che ha funzionato per me:(voce nella tabella CustomAction)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

Altri suggerimenti

Sono riuscito a risolvere questo problema creando un EXE composto essenzialmente da:

System.Diagnostics.Process.Start(pathToBatchFile);

Aggiunta dell'EXE al file MSI quindi esecuzione come azione personalizzata.

Sebbene la risposta suggerita da "William Leara" sia un ottimo inizio, ho trovato una soluzione migliore Qui Vale la pena citare.

Un altro vantaggio di questo metodo è che puoi inserire il file batch nella cartella di installazione dell'applicazione anziché nella cartella root C, ma utilizziamo flag speciali per rinviare l'esecuzione a dopo Copia file azione, usiamo anche noImpersonare avere privilegi più elevati necessari per scappare File di programma

Alcune note:

  1. Utilizzo TARGETDIR invece di INSTALLDIR
  2. Assicurati di citare i percorsi.

Queste sono le mie due azioni personalizzate.Nel mio caso voglio forzare nativo processore dei comandi per correggere alcune voci di registro, quindi non lo utilizzo COMP.

La prima azione (tipo 50) esegue il comando in Source con argomenti di input di Target, poiché Type è 50+1024+2048 a cui viene rinviata l'azione con noImpersonare bandiera.

  • Azione: Azione finale
  • Tipo: 3122
  • Fonte: NCOM
  • Bersaglio: /c "[DIRTARGET]Riparazione.bat"

La seconda azione definisce NCOM proprietà immediatamente:

  • Azione: FinalNativeSys
  • Tipo: 51
  • Fonte: NCOM
  • Bersaglio: [Cartella Windows]System32\cmd.exe

Quindi dovresti aggiungere queste azioni a InstallExecuteSequence:

  • Azione: Azione finale
  • Condizione: Non installato
  • Sequenza: 5002

E questo:

  • Azione: FinalNativeSys
  • Condizione:
  • Sequenza: 5001

Nota che nel mio caso potrei facilmente modificare le azioni da chiamare reg.exe importa Fixup.reg pure.Finalmente si può usare msitran come suggerito Qui in una post build per automatizzare la procedura.

Crea un EXE che crei un file .bat temporaneo da modificare nella directory che desideri e CALL un altro file bat che fa ciò di cui hai bisogno.

Di' all'azione personalizzata di usare quell'exe.

Il primo argomento di un exe CPP è il percorso dell'exe stesso.Questo può essere utilizzato per orientarsi e tali informazioni potrebbero essere utilizzate nella creazione del file .bat temporaneo

Nel mio caso, ho aggiunto "Azioni personalizzate".
Nella cartella "Installa" scegli "Aggiungi azione personalizzata"
Scegli cmd.exe (c:\windows\system32\cmd.exe)
Quindi nelle proprietà di cmd.exe modifica "Argomenti" in
"/Install /c C:\myApp.exe --exec-qualche-azione"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top