Ich habe eine Anwendung, die ich in Visual Studio 2010 entwickelt habe und das Installationsprogramm (als MSI-Datei) konfigurieren muss, um das Programm zu starten und dann die Aufgabe zu beenden. Ich habe eine benutzerdefinierte Aktion in der MSI, um das Programm zu starten, aber ich habe Schwierigkeiten, einen Schritt hinzuzufügen, um die Aufgabe auch zu töten. Irgendwelche Vorschläge wären großartig. Vielen Dank!Konfigurieren einer MSI-Datei zum Starten und Beenden eines Programms bei der Installation
0
A
Antwort
0
Sie müssen eine benutzerdefinierte Aktion erstellen, um damit umzugehen. Windows Installer verfügt nicht über ein Killprozess-Ereignis. Unten ist eine native C++ App, die ich erstellt habe, um damit umzugehen.
// KillProc.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <algorithm>
#include <string>
BOOL KillProcess(_TCHAR* szProcessToKill);
TCHAR* AcTcharlower(TCHAR *pString);
int _tmain(int argc, _TCHAR* argv[])
{
if(argc > 1){
KillProcess(argv[1]);
}else{
// No Process found
}
return 0;
}
BOOL KillProcess(_TCHAR* szProcessToKill){
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 processEntry32;
LPWSTR lpszBuffer = new TCHAR[MAX_PATH];
LPWSTR lpszProcessToKill = new TCHAR[MAX_PATH];
lpszProcessToKill = AcTcharlower(szProcessToKill);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // Takes a snapshot of all the processes
if(hProcessSnap == INVALID_HANDLE_VALUE){
return(FALSE);
}
processEntry32.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(hProcessSnap, &processEntry32))
{
CloseHandle(hProcessSnap);
return(FALSE);
}
do
{
lpszBuffer = processEntry32.szExeFile;
if(!wcsicmp(lpszBuffer,szProcessToKill)){ // Is this our Process
hProcess = OpenProcess(PROCESS_TERMINATE,0, processEntry32.th32ProcessID); // It is so get the process handle
TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}while(Process32Next(hProcessSnap,&processEntry32)); // gets next member of snapshot
CloseHandle(hProcessSnap); // closes the snapshot handle
return(TRUE);
}
TCHAR* AcTcharlower(TCHAR *pString)
{
static TCHAR pBuffer[MAX_PATH];
TCHAR *s = pString;
TCHAR *t = pBuffer;
while (*s != '\0')
{
*t = tolower(*s);
s++;
t++;
}
return(pBuffer);
}
Verwandte Themen
- 1. Richtiger Weg zum Beenden/Beenden eines PyQt-Programms
- 2. Verwalten der Escape-Taste zum Beenden eines Programms
- 3. Beenden eines Programms in Python
- 4. Starten eines Programms mit einer Datei uri
- 5. laufenden AdB mit Python: Ausführen eines Programms und Beenden
- 6. Konfigurieren Fehler bei der Installation fftw
- 7. Anmutiges Beenden eines Programms in Python?
- 8. Konfigurieren des NuGet-Pakets zum Hinzufügen eines Build-Ereignisses bei der Installation
- 9. Rückkehr zum Menü & Beenden des Programms
- 10. Eingeben einer Benutzereingabe zum Laden eines Programms
- 11. Starten eines externen Programms von PHP
- 12. Verwenden von PackageMaker zum Ausführen eines Skripts bei der Installation
- 13. Verlust der Datenstruktur bei Beendigung des Programms
- 14. Stoppen eines Python-Programms
- 15. Starten eines Funken-Programms mit Oozie-Workflow
- 16. Auf der Suche nach einer bequemen Möglichkeit zum Starten und Beenden von Anwendungen mit Docker-Compose
- 17. der Grund für das Beenden meines Programms
- 18. Beenden einer Anwendung (Spiel) und Beenden oder und Starten einer neuen
- 19. C-Programm - Extra Eintrag zum Beenden des Programms
- 20. Verwenden eines BroadcastReceivers zum Starten einer AsyncTask
- 21. VirtualBox: Verwenden der SDK-API zum Starten eines Programms im Gast?
- 22. PendingIntent zum Starten und Stoppen eines Service
- 23. Beendigung des Programms beim Beenden
- 24. Datenbank nicht beim Beenden des Programms speichern
- 25. Fehler bei der Installation eines Plugins
- 26. Äquivalent von Strg c in Befehl zum Abbrechen eines Programms
- 27. Fehler bei der Installation eines Conda-Pakets
- 28. Verschieben des Standorts und Ändern der Größe eines externen Programms
- 29. Javafx Zeile Farbe & Buchstabe 'q' zum Beenden des Programms
- 30. Fehler bei der Installation eines NPM-Moduls
Wenn Sie in Ihrer benutzerdefinierten Aktion Code haben, der nicht funktioniert, zeigen Sie den Code an. Das ist nicht wirklich ein Windows Installer Problem AFAIK. – PhilDW
Es gibt keinen Code, auf dem Commit-Knoten habe ich jetzt den primären Ausgang. Kein benutzerdefinierter Code dahinter. Ich frage, ob es eine Möglichkeit gibt, die Anwendung starten zu lassen und dann als Teil der Installation zu schließen. –
Wenn Sie den Prozess als benutzerdefinierte Commitaktion in einer Everyone-Installation starten, gibt es zwei Probleme. 1) Es wird mit dem Systemkonto ausgeführt und kann nicht auf den Desktop und andere Benutzerprofilelemente zugreifen, was möglicherweise fehlschlägt und 2) Die Installation wird angehalten, bis der Prozess abgeschlossen ist. Es ist mir immer noch nicht klar, was "kill" in deiner Frage bedeutet, weil es bedeutet, dass du dein Programm mit deinem Code startest, also warum endet es nicht einfach? – PhilDW