EnviromentBlock

28/08/2009 - 09:21 von Michael Kolowicz | Report spam
Guten Tag,

ich bràuchte mal einen kleine Unterstützung von hier.

Ich benutze in meiner Anwendung den CreateProcessWithLogonW um eine
Anwendung im Kontext eines anderen Benutzers zu starten.

Nun stelle ich fest, das die Umgebungsvariablen aber die des verwendeten
Benutzers (Admin) sind und nicht die des aufrufenden Benutzers
(Benutzer) sind.

Durch die Verwendung eines Paramters beim Aufruf des API kann man das
steuern. Leider finde ich kein Beispiel, wo mir gezeigt wird, wie ich
unter VB.NET diesen Parameter mit dem Aufruf von CreateEnviromentBlock
füllen kann.

Wenn dieser Parameter nàmlich leer ist (IntPrt.Zero) wird der
Enviromentblock des verwendeten Benutzers verwendet. Möchte aber gerne
eine Kopie des EB des aufrufenden Benutzers übergeben.

Hat da jemand einen Link oder Beispiel wie ich diese Variabel mit
CreateEnviromentBlock in VB.NET 2008 entsprechend füllen kann?

Vielen Dank
Michael
 

Lesen sie die antworten

#1 Elmar Boye
28/08/2009 - 09:45 | Warnen spam
Hallo Michael,

Michael Kolowicz schrieb:

Ich benutze in meiner Anwendung den CreateProcessWithLogonW um eine
Anwendung im Kontext eines anderen Benutzers zu starten.



Und warum machst Du die API Umstànde?
Process.Start mit einem Benutzer nutzt ebendiesen
Aufruf, wenn Du einen Benutzer mitgibst.

Nun stelle ich fest, das die Umgebungsvariablen aber die des verwendeten
Benutzers (Admin) sind und nicht die des aufrufenden Benutzers
(Benutzer) sind.



... und ermöglicht eine Übergabe über ProcessStartInfo.EnvironmentVariables
<URL:http://msdn.microsoft.com/de-de/lib...s.aspx>

Wenn dieser Parameter nàmlich leer ist (IntPrt.Zero) wird der
Enviromentblock des verwendeten Benutzers verwendet. Möchte aber gerne
eine Kopie des EB des aufrufenden Benutzers übergeben.



... was als Vorgabe Environment.GetEnvironmentVariables entspricht
<URL:http://msdn.microsoft.com/en-us/lib...s.aspx>

Hat da jemand einen Link oder Beispiel wie ich diese Variabel mit
CreateEnviromentBlock in VB.NET 2008 entsprechend füllen kann?



Des wàre ebenfalls Unmanged, den (gepinnten) Adressblock
kannst Du z. B. über GCHandle.Alloc bekommen.

Den Code bastele ich erst wenn die Eingangsfrage geklàrt ist -
denn IMHO ist der Weg via API insgesamt überflüssig.

Gruß Elmar

Ähnliche fragen