Ich habe bei Google geforscht, um den geeigneten Weg zu finden, den Installationspfad zu bestimmen, den ein Benutzer im Installationsassistenten auswählt.Visual Studio-Installationsprojekt: Zielverzeichnis abrufen
Im Grunde laufe ich auf ein Problem, bei dem mein Dienst keine Dateien in seinem eigenen Verzeichnis erstellen kann, weil ihm die entsprechenden Berechtigungen fehlen. Ich gehe davon aus, dass der richtige Weg, dies zu lösen, darin besteht, sicherzustellen, dass jedes Konto, das der Dienst verwendet, entsprechende Dateiberechtigungen für seinen Ordner erhält.
Aber bevor ich überhaupt angehen kann, wie Berechtigungen über .Net festgelegt werden, muss ich den Installationsordner kennen. Ich verwende ein Installationsprojekt, das eine Installer-Klasse enthält, die ebenfalls ein ServiceInstaller
Steuerelement enthält. Beide haben die Context
-Eigenschaft, also habe ich das für die Parameter überprüft, die verfügbar sind, wenn das AfterInstall-Ereignis für die jeweiligen Installer ausgelöst wird. Ich dachte zuerst, ich würde die TargetDir
Eigenschaft Set sehen, aber das war nicht der Fall. Ich sehe aber AssemblyPath
setzen und auf die ausführbare Datei des entsprechenden Ordners zeigen.
Wesentlichen sicher, ich möchte nur sicherstellen, dass dies die geeignete Methode ist, sollte ich verwenden:
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}
Sie müssen auch ein zusätzliches Leerzeichen nach dem umgekehrten Schrägstrich "\" hinzufügen. Andernfalls können Sie beim Installieren oder Deinstallieren eine FileNotFoundException-Ausnahme erhalten. Siehe [hier] (http://stackoverflow.com/questions/4516256/how-doi-i-fix-setup-project-with-custom-action-file-not-found-exception/4522825#4522825) oder [hier ] (http://stackoverflow.com/questions/8491095/error-1001-using-custom-installer-with-visual-studio-2008). –
Wo verwenden Sie diesen Text? Deine Erklärung ist mir nicht ganz klar, Entschuldigung. Als Befehlszeilenargument für das Projekt? Irgendwo im Code? Diese Verbindung zu MSDN ist jetzt auch unterbrochen. Danke Microsoft! :-) –
Oh, ich sehe jetzt. Ich habe die Antwort in einem anderen Post gefunden: "Fügen Sie in Ihrem Bereitstellungsprojekt eine benutzerdefinierte Aktion für die Installation und das Commit hinzu. Geben Sie für die CustomActionData-Eigenschaft für die benutzerdefinierte Installation Aktion ein/Targetdir =" [TARGETDIR] \ "" –