Ich verwende Visual Studio 2008, um ein MSI-Installationspaket zu erstellen. Innerhalb der Installation habe ich zahlreiche benutzerdefinierte Aktionen. Innerhalb der benutzerdefinierten Aktion OnAfterInstall versuche ich, eine Exe zu starten, die von der Installation bereitgestellt wird. Die Exe wird ordnungsgemäß gestartet, läuft aber in einem Sicherheitskontext von NT AUTHORITY \SYSTEM (d. h. unter den erhöhten Rechten, die dem Windows Installer-Prozess gewährt werden). Eigentlich muss die Exe-Datei im Sicherheitskontext des aktuell angemeldeten Benutzers ausgeführt werden, der die Installation überhaupt erst gestartet hat. Weiß jemand, wie man die Exe-Datei so startet, dass sie in diesem "reduzierten" Kontext ausgeführt wird? Ich möchte nach Möglichkeit vermeiden, den Benutzer nach seinen Anmeldedaten zu fragen.
Antwort
Zu viele Anzeigen?Sie müssen Remote Desktop Services API verwenden: http://msdn.microsoft.com/en-us/library/aa383464%28v=VS.85%29.aspx . Es ist ab WinXP verfügbar.
Diese API ermöglicht es Ihnen, Ihre Anwendung im Kontext eines beliebigen angemeldeten Benutzerkontos auszuführen. Um sie nutzen zu können, müssen Sie als SYSTEM laufen. Und das sind Sie. Sie können zum Beispiel mit WTSEnumerateSessions Sitzungen aufzählen, dann mit WTSQueryUserToken ein Benutzerkennzeichen abfragen und Ihre Anwendung mit diesem Kennzeichen ausführen.