In Bereitstellungsprojekt EXE starten

04/08/2008 - 18:33 von Harry Neumann | Report spam
Hallo,
ich würde gerne in einem Bereitstellungsprojekt eine eigene Assembly
starten; d.h. an einer bestimmten Stelle der Installation (vor dem Commit)
soll das eigene Prog laufen + beenden und danach soll die Installation
weiterlaufen. Ich habe es mit "Benutzerdefinierten Aktionen" versucht, aber
bisher ist mir das nicht gelungen. Geht das überhaupt?
Gruss, Harry
 

Lesen sie die antworten

#1 Frank Dzaebel
04/08/2008 - 19:52 | Warnen spam
Hallo Harry,

ich würde gerne in einem Bereitstellungsprojekt eine
eigene Assembly starten; d.h. an einer bestimmten Stelle
der Installation (vor dem Commit) soll das eigene Prog
laufen + beenden und danach soll die Installation
weiterlaufen. Ich habe es mit "Benutzerdefinierten Aktionen"
versucht, aber bisher ist mir das nicht gelungen.
Geht das überhaupt?



Ja, das geht. Das ist auch eine gute Methode, um den ersten
ersten Start einer .NET App zu verkürzen. Grober Ansatz:


string appFileName = "MeinProgramm.exe";

[SecurityPermission(SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
#region für Tests
//string text = "";
//foreach (string st in Context.Parameters.Keys)
//{
// text += st + "=" + Context.Parameters[st] + ", ";
//}
//MessageBox.Show(text);
#endregion

string targetDir = Context.Parameters["targetDir"];
base.Commit(savedState);
Cursor.Current = Cursors.WaitCursor;
ShortcutsErstellen(targetDir);
string VerzeichnisFürCustomActions = "en\\ca";
int waitSeconds = 10;
MeinProgramm_einmal_aufrufen(targetDir, "/close", waitSeconds ,
VerzeichnisFürCustomActions);
Cursor.Current = Cursors.Default;
}


/// <summary>Das Programm wird unsichtbar einmal göffnet,
/// damit der erste Aufruf schneller geht.
/// Das Programm löscht die CustumAction-DLL Ordenr tmp.</summary>
/// <param name="parameter">Z.B. "/close". Wird das Programm mit
/// diesem Parameter aufgerufen, startet es unsichtbar und beendet es
/// sich selbst.</param>
/// <param name="waitSeconds">Anzahl der Sekunden, die gewartet
/// werden sollen</param>
private void PrinterConnect_einmal_aufrufen(string targetDir,
string parameter, int waitSeconds, string dirToDelete)
{
dirToDelete = Path.Combine(targetDir, dirToDelete);
string programPath = Path.Combine(targetDir, appFileName);
Process p = Process.Start(programPath, "/close");
p.WaitForExit(waitSeconds * 1000);
string caDir = Path.Combine(targetDir, dirToDelete);
string delCustomVbsPath = Path.Combine(caDir,
"DeleteCustomAction.vbs");
Process.Start(delCustomVbsPath, "\"" + caDir + "\"");
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen