Hallo liebe VB-Paradise Mitglieder,
ich habe leider eine Problemstellung an der ich schon einige Zeit arbeite und auch nach zahlreichen Foren- und Internet-Recherchen sowie das Konsumieren des Inhalts zahlreicher Kaffeetassen hat mich keiner Lösung näher gebracht. Ich hoffe daher, nachdem ich entweder keinen Eintrag im Forum hierzu gefunden habe bzw. ähnliche Einträge nicht geholfen haben, das mir über diesen neuen Eintrag jemand weiterhelfen kann - vielen lieben Dank für jeden Lösungsvorschlag!
Es geht um folgendes, ich hab ein Programm in VB.net geschrieben (welches als Administrator ausgeführt wird) und ein Batchfile aufruft. Dieses wiederrum ruft ein Powershell-Scipt auf.
Das Programm wird auf einem Rechner mit Windows Server 2012 R2 ausgeführt.
In der app.manifest ist folgende Zeile eingetragen (wurde auf requireAdministrator geändert):
Die Aufrufe sind so aufgebaut
VB.net Programm
'- (VB.net erstellt) Batchdatei
'- (Batchdatei ruft auf:) Powershell
Nun zur Problemstellung, das VB.net Programm startet nach der UAC Abfrage mit Admin-Rechte. In diesem Programm werden Einstellungen gesetzt die dann im Batchfile bzw. Powershell-Script übernommen werden. Wenn ich das Batchfile mit "Run as Administrator" aus dem Explorer heraus aufrufe funktioniert das Powershell-Script. Wenn ich das Batchfile allerdings aus dem VB.net Programm - welches ja mit Admin-Rechte gestartet wurde - heraus starte erhalte ich die Meldung, dass z.B. "add-windowsfeature" nicht bekannt ist.
VB.net Programm
'- (VB.net erstellt) Batchdatei --> mit "Run as Administrator" ---> Ausführung des Powershell-Scripts funktioniert
'- (Batchdatei ruft auf:) Powershell (ebenfalls vom VB.net Programm erstellt)
VB.net Programm
'- (VB.net erstellt) Batchdatei --> mit VB.net ausgeführt ---> Ausführung des Powershell-Scripts funktioniert NICHT
'- (Batchdatei ruft auf:) Powershell (ebenfalls vom VB.net Programm erstellt)
Um das Batchfile auszuführen verwende ich folgenden Code:
Ich verstehe nur nicht, warum es mit Batchfiles -> Run as Administrator funktioniert und aus dem VB.net Programm nicht? Ich vermute ein Zugriff/Rechte Problem nachdem es ja mit Run as Administrator funktioniert.
Wenn ich jedoch processStartInfo.Username/Password/Domain setze funktioniert es. Für mich ergibt das aber keinen Sinn - das VB.net Programm ist ja bereits mit Admin-Rechte gestartet und "Run as Administrator" fragt ja auch nicht nach den Benutzerdaten.
Hier noch der Aufbau des Batchfiles:
Ich habe auch schon "PowerShell.exe -ExecutionPolicy Bypass -File ...." versucht jedoch hilft das auch nichts.
Es betrifft aber wohl nur die Powershell Commands bei denen die Konfiguration des Computers geändert wird (also die Verwendung von add-windowsfeature, New-RDSessionCollection, Add-RDServer usw.).
Das Powershell-Script hat aber keine Probleme auf die Registry des Rechners zuzugreifen (ändern/schreiben).
Das VB.net Programm sowie das Batchfile und Powershell Script werden alle lokal ausgeführt. Ein Zugriffsproblem auf einem entfernten Rechner kann daher ausgeschlossen werden.
Wie gesagt, ich stehe da leider an mit meinem Wissensstand - natürlich wäre es eine Möglichkeit über ein zusätzliches Forumlar die Benutzerdaten abzufragen, da das Programm aber eben bereits mit Admin-Rechte läuft werden sich die Benutzer wohl sehr wundern - und ärgern, da ein Feature installiert und - nach einem Neustart - konfiguriert werden muss. Das passiert beides über den Aufruf aus dem VB.net Programm heraus mit dem Batchfile bzw. Powershell-Script.
Ich möchte mich nochmals schonmal vorab bei allen herzlich bedanken die Hilfe anbieten!
Liebe Grüße
michi
ich habe leider eine Problemstellung an der ich schon einige Zeit arbeite und auch nach zahlreichen Foren- und Internet-Recherchen sowie das Konsumieren des Inhalts zahlreicher Kaffeetassen hat mich keiner Lösung näher gebracht. Ich hoffe daher, nachdem ich entweder keinen Eintrag im Forum hierzu gefunden habe bzw. ähnliche Einträge nicht geholfen haben, das mir über diesen neuen Eintrag jemand weiterhelfen kann - vielen lieben Dank für jeden Lösungsvorschlag!
Es geht um folgendes, ich hab ein Programm in VB.net geschrieben (welches als Administrator ausgeführt wird) und ein Batchfile aufruft. Dieses wiederrum ruft ein Powershell-Scipt auf.
Das Programm wird auf einem Rechner mit Windows Server 2012 R2 ausgeführt.
In der app.manifest ist folgende Zeile eingetragen (wurde auf requireAdministrator geändert):
Die Aufrufe sind so aufgebaut
VB.net Programm
'- (VB.net erstellt) Batchdatei
'- (Batchdatei ruft auf:) Powershell
Nun zur Problemstellung, das VB.net Programm startet nach der UAC Abfrage mit Admin-Rechte. In diesem Programm werden Einstellungen gesetzt die dann im Batchfile bzw. Powershell-Script übernommen werden. Wenn ich das Batchfile mit "Run as Administrator" aus dem Explorer heraus aufrufe funktioniert das Powershell-Script. Wenn ich das Batchfile allerdings aus dem VB.net Programm - welches ja mit Admin-Rechte gestartet wurde - heraus starte erhalte ich die Meldung, dass z.B. "add-windowsfeature" nicht bekannt ist.
VB.net Programm
'- (VB.net erstellt) Batchdatei --> mit "Run as Administrator" ---> Ausführung des Powershell-Scripts funktioniert
'- (Batchdatei ruft auf:) Powershell (ebenfalls vom VB.net Programm erstellt)
VB.net Programm
'- (VB.net erstellt) Batchdatei --> mit VB.net ausgeführt ---> Ausführung des Powershell-Scripts funktioniert NICHT
'- (Batchdatei ruft auf:) Powershell (ebenfalls vom VB.net Programm erstellt)
Um das Batchfile auszuführen verwende ich folgenden Code:
VB.NET-Quellcode
- Dim process As System.Diagnostics.Process = Nothing
- Dim processStartInfo As System.Diagnostics.ProcessStartInfo
- processStartInfo = New System.Diagnostics.ProcessStartInfo
- processStartInfo.FileName = "cmd.exe"
- processStartInfo.Verb = "runas"
- processStartInfo.Arguments = "/C " & sBatchFilePath
- processStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
- processStartInfo.UseShellExecute = True
- Try
- process = System.Diagnostics.Process.Start(processStartInfo)
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
- Finally
- If Not (process Is Nothing) Then
- process.Dispose()
- End If
- End Try
Ich verstehe nur nicht, warum es mit Batchfiles -> Run as Administrator funktioniert und aus dem VB.net Programm nicht? Ich vermute ein Zugriff/Rechte Problem nachdem es ja mit Run as Administrator funktioniert.
Wenn ich jedoch processStartInfo.Username/Password/Domain setze funktioniert es. Für mich ergibt das aber keinen Sinn - das VB.net Programm ist ja bereits mit Admin-Rechte gestartet und "Run as Administrator" fragt ja auch nicht nach den Benutzerdaten.
Hier noch der Aufbau des Batchfiles:
Quellcode
- @echo off
- echo Starting script for installation/configuration at %date% %time%
- echo Starting script for installation/configuration at %date% %time% >> "$_outputpath\$_PowershellLog"
- Powershell.exe -file "$_outputpath\$_PowershellScript" >> "$_outputpath\$_PowershellLog"
- echo Script finished at %date% %time% >> "$_outputpath\$_PowershellLog"
- pause
Ich habe auch schon "PowerShell.exe -ExecutionPolicy Bypass -File ...." versucht jedoch hilft das auch nichts.
Es betrifft aber wohl nur die Powershell Commands bei denen die Konfiguration des Computers geändert wird (also die Verwendung von add-windowsfeature, New-RDSessionCollection, Add-RDServer usw.).
Das Powershell-Script hat aber keine Probleme auf die Registry des Rechners zuzugreifen (ändern/schreiben).
Das VB.net Programm sowie das Batchfile und Powershell Script werden alle lokal ausgeführt. Ein Zugriffsproblem auf einem entfernten Rechner kann daher ausgeschlossen werden.
Wie gesagt, ich stehe da leider an mit meinem Wissensstand - natürlich wäre es eine Möglichkeit über ein zusätzliches Forumlar die Benutzerdaten abzufragen, da das Programm aber eben bereits mit Admin-Rechte läuft werden sich die Benutzer wohl sehr wundern - und ärgern, da ein Feature installiert und - nach einem Neustart - konfiguriert werden muss. Das passiert beides über den Aufruf aus dem VB.net Programm heraus mit dem Batchfile bzw. Powershell-Script.
Ich möchte mich nochmals schonmal vorab bei allen herzlich bedanken die Hilfe anbieten!
Liebe Grüße
michi
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „michib82“ ()