Domanda

In un progetto di installazione dei file eseguibili come ".exe, .dll, .js, .vbs" sono accettabili, ma non v'è alcun modo per eseguire un file .bat in un'azione personalizzata.

La domanda è: come gestire i file *.bat durante l'installazione?

È stato utile?

Soluzione

Bene, dopo molte ricerche e tentativi ed errori ho risolto questo. Non sono sicuro se questo è il modo migliore, ma funziona.

Ecco lo scenario: Ho una domanda vorrei distribuire tramite un progetto di installazione di Visual Studio. Oltre ai miei file di applicazione, vorrei creare una sottodirectory nella directory di destinazione che contiene un file batch (.bat). Vorrei che questo file per eseguire al termine del processo di installazione.

Ecco cosa dovete fare:

  1. Creare un progetto di installazione e configurare come si farebbe normalmente, compresa la sottodirectory in cui potrete inserire il vostro file batch (si può semplicemente inserirlo nella cartella dell'applicazione direttamente, se non si vuole in una sottodirectory).
  2. Nella vista "File System" (tasto destro del mouse sul progetto in Solution Explorer-> Visualizza-> File System), aggiungere il file batch che si desidera eseguire il e cmd.exe (C : \ Windows \ System32 \ cmd.exe)
  3. Aprire le "Azioni personalizzate" Vista (tasto destro del mouse sul progetto in Solution Explorer-> Visualizza-> Azioni personalizzate)
  4. Fai clic destro su "Commit" e scegliere "Aggiungi azione personalizzata"
  5. individuare e selezionare cmd.exe.
  6. Aprire il pannello delle proprietà per l'azione personalizzata appena creata.
  7. Elimina / Commit dalla proprietà Arguments.
  8. Inserisci: /c "[TARGETDIR]subdirectoryname\batchfile.bat" nella proprietà Arguments, dove subdirectoryname dovrebbe essere sostituito con il nome del vostro sottodirectory (se si mette il file batch in una sottodirectory come ho fatto io ... se non l'avete fatto , il valore deve essere /c "[TARGETDIR]batchfile.bat") e batchfile.bat dovrebbe essere il nome del vostro file batch.

Questo è tutto. sarà ora eseguito il file batch una volta che il resto del processo di installazione è completata.

Ecco un esempio per ragioni di chiarezza:

Il mio file batch: blah.bat
La mia sottodirectory: mydir

Il valore degli argomenti per la mia azione personalizzata di mira cmd.exe sarebbe allora

/c "[TARGETDIR]mydir\blah.bat"

La speranza che aiuta qualcuno!

Altri suggerimenti

  1. Controlla questo articolo (articolo è deprecato), anche se è in VB.NET si applica a C # pure. La parte più importante è (tradotto in C #) la creazione di una nuova libreria di classi, e l'aggiunta di una nuova classe di installazione con il seguente contenuto: Come indicato in questo articolo è possibile creare una nuova azione personalizzata con un riferimento al progetto appena creato <. / p>

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. Ora stiamo aggiungendo file batch al progetto di installazione. Creare un progetto di installazione e configurare come si farebbe normalmente, compresa la sottodirectory in cui potrete inserire il vostro file batch (si può semplicemente inserirlo nella cartella dell'applicazione direttamente, se non si vuole in una sottodirectory).

  3. Nel "File System" Vista (tasto destro del mouse sul progetto in Solution Explorer-> Visualizza-> File System), aggiungere il file batch che si desidera eseguire.

  4. Il progetto di installazione.

Un altro modo per raggiungere lo stesso risultato viene messo un file vbs in azioni personalizzate che gestisce il corrispondente file .bat. Il seguente codice è il "RunRegisterComponents.vbs" Ho messo nella cartella di applicazione di configurazione. Naturalmente ho messo [TARGETDIR] come vbs parametro in Visual Studio finestra delle proprietà.

dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir=  property("CustomActionData")

' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)

' Set the current directory
WshShell.CurrentDirectory = programDir

' Run batch.
ret = WshShell.Run (commandString, 0, 0)

Ecco come ho impostato il mio azioni personalizzate:

entrare descrizione dell'immagine qui

Spero che questo ti può aiutare!

Se si sta tentando di eseguire un file batch che hanno percorsi relativi durante il processo di installazione, che non riuscirà di sicuro. Questo perché il file batch terrà conto della directory in cui il programma di installazione è in esecuzione, e non dove erano installati i file. Utilizzare i costruttori di installazione che copia i file in batch nella directory temporanea.

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