Domanda

Ho creato un progetto di installazione VS per la mia app. Si installa l'applicazione per posizione definita dall'utente e crea diversi collegamenti nel menu di avvio. Si crea anche una voce nel Pannello di controllo / Installazione applicazioni che possono essere utilizzate per disinstallare l'applicazione.

Vorrei sapere se c'è un modo per creare una voce di menu di avvio (accanto ad altre voci create dal programma di installazione) che potrebbero disinstallare la mia app.

Finora ho trovato una soluzione, ma è il dolore da usare: Ho creato il file uninstall.bat che schiero nella mia cartella app e io sono l'aggiunta di un collegamento a questo file. Contenuto del *.bat aspetto:

@echo off
msiexec /x {0B02B2AB-12C6-4548-BF90-F754372B0D36}

Quello che non mi piace di questa soluzione è che ogni volta che aggiorno un codice prodotto della mia app (lo sto facendo che ogni volta che aggiorno la mia versione di app come suggerisce VS) devo modificare manualmente il file di installazione prima di costruire progetto e tipo corretto nuovo codice prodotto.

Qualcuno sa un modo più semplice per aggiungere programma di disinstallazione per l'applicazione?

È stato utile?

Soluzione

È possibile modificare il file .bat per accettare un argomento.

@echo off
msiexec /x %1

Nel progetto di installazione, in cui si definisce la scelta rapida, aggiungere il [ProductCode] proprietà come argomento.

Altri suggerimenti

Ho avuto questo problema esatto.

Quello che ho fatto è stato questo:

  • fornire il file uninstall.bat. Questo file viene installato incondizionatamente
  • fornire un'azione personalizzata nel programma di installazione, che riscrive il file uninstall.bat, e inserisce il codice di prodotto corretto.

Ecco lo script che viene eseguito come un'azione personalizzata. Si riscrive il file uninstall.bat, poi si elimina.

// CreateUninstaller.js
//
// Runs on installation, to create an uninstaller
// .cmd file in the application folder.  This makes it
// easy to uninstall. 
//
// Mon, 31 Aug 2009  05:13
//

var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");

var parameters = Session.Property("CustomActionData").split("|"); 
var targetDir = parameters[0];
var productCode = parameters[1];

ts = fso.OpenTextFile(targetDir + "uninstall.cmd", ForWriting, true);


ts.WriteLine("@echo off");
ts.WriteLine("goto START");
ts.WriteLine("=======================================================");
ts.WriteLine(" Uninstall.cmd");
ts.WriteBlankLines(1);
ts.WriteLine(" This is part of MyProduct.");
ts.WriteBlankLines(1);
ts.WriteLine(" Run this to uninstall MyProduct");
ts.WriteBlankLines(1);
ts.WriteLine("=======================================================");
ts.WriteBlankLines(1);
ts.WriteLine(":START");
ts.WriteLine("@REM The uuid is the 'ProductCode' in the Visual Studio setup project");
ts.WriteLine("%windir%\\system32\\msiexec /x " + productCode);
ts.WriteBlankLines(1);
ts.Close();


// all done - try to delete myself.
try 
{
    var scriptName = targetDir + "createUninstaller.js";
    if (fso.FileExists(scriptName))
    {
        fso.DeleteFile(scriptName);
    }
}
catch (e2)
{
}

Credo che avrei potuto fare questo con WiX, ma non ho voglia di imparare.

Un'altra opzione è quella di chiamare il msiexec disinstallare dall'applicazione stessa, se viene dato un certo argomento della riga comandi - vedere l'esempio illustrato qui per ulteriori dettagli: http://endofstream.com/creating-uninstaller-in-a-visual-studio-project/

Per fare in questo modo, non sarà costretti a vedere il prompt dei comandi durante la disinstallazione:)

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