PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Windows-Systemtools mit anderen Anwendungen aufrufen??


aths
2013-10-07, 15:33:02
Ich starte jetzt mit einem Launcher eine weitere App mit Admin-Rechten. Wenn ich dort pnputil aufrufe, klappt das aber nicht. Angeblich existiert es nicht, obwohl es da ist (physisch, und per Konsole startbar.) Ich rufe deswegen eine Bat-Datei auf, die pnputil starten soll, doch es wird noch immer nicht gefunden.


Ich will via Windows-Utility pnputils eine Treibersoftware installieren. Das funktioniert, wenn ich den Befehl in einer Konsole eingebe die als Admin gestartet, oder den Befehl in eine Bat-Datei packe und diese Bat-Datei von einer Konsole mit Admin-Rechten starte.

Mit "Adminrechten" heißt, dass die Konsole explizit damit gestartet wird, es reicht nicht, Admin-Rechte als User zu haben und die Konsole normal zu starten bzw. die Bat-Datei normal aufzurufen.

Wie kann man, z.B. mit einer zweiten Bat-Datei, eine Datei als Admin starten? Da kann ja gerne die UAC-Abfrage kommen, Hauptsache der User muss nicht umständlich manuell die Datei als Admin starten.

Kann man das aus einem anderen Programm heraus mit ShellExecute hinkriegen? edit: Das sollte möglich sein, ich schaue gerade mal in die MSDN-Doku.

Fatality
2013-10-07, 15:43:58
Moin,

die lösung ist eine verknüpfung zu der bat/cmd zu erstellen und in den eigenschaften der verknüpfung, dann ein häckchen zu setzen.

http://www.abload.de/img/erw2sol.png

aths
2013-10-07, 15:58:28
Das ist leider keine Lösung, weil die Installationsdateien verteilt werden soll.

Mit ShellExecute kann man offenbar einen Prozess als Admin starten, aber hier funktioniert offenbar gerade was anderes nicht.

PatkIllA
2013-10-07, 16:09:30
keine batch nehmen sondern eine exe.
Darin ein paar andere Dateien aufrufen ist ja ziemlich einfach. Kompliziertere Dingen will man eh nicht in batch skripten.

edit:
man kann über die Umgebungsvariable "__compat_layer" noch einige Workarounds setzen.
Ich habe es bislang aber nur hinbekommen weniger anzufordern. (also eben keine Adminrechte anzufordern)

pollux
2013-10-07, 16:24:30
runas !?

edit: naja hmm wohl eher nicht. Man muss ja fest den Username angeben...

aths
2013-10-07, 16:37:14
runas !?

edit: naja hmm wohl eher nicht. Man muss ja fest den Username angeben...
Das wäre kein Problem, runas aber gibt einer Anwendung nicht Admin-Rechte nur weil der User Admin ist.


Ich starte jetzt mit einem Launcher eine weitere App mit Admin-Rechten. Das klappt offenbar. Wenn ich dort pnputil aufrufe, klappt das aber nicht. Angeblich existiert es nicht, obwohl es da ist (physisch, und per Konsole startbar.) Ich rufe deswegen eine Bat-Datei auf, die pnputil starten soll, doch es wird noch immer nicht gefunden.

pollux
2013-10-07, 17:21:10
Was ist, wenn du bei ShellExecute für den Parameter lpOperation den Wert "runAs" nimmst?

A pointer to a null-terminated string, referred to in this case as a verb, that specifies the action to be performed. The set of available verbs depends on the particular file or folder. Generally, the actions available from an object's shortcut menu are available verbs.

Also batch-files haben zumindest das verb runas...

hadez16
2013-10-07, 17:51:05
Das wäre kein Problem, runas aber gibt einer Anwendung nicht Admin-Rechte nur weil der User Admin ist.


Ich starte jetzt mit einem Launcher eine weitere App mit Admin-Rechten. Das klappt offenbar. Wenn ich dort pnputil aufrufe, klappt das aber nicht. Angeblich existiert es nicht, obwohl es da ist (physisch, und per Konsole startbar.) Ich rufe deswegen eine Bat-Datei auf, die pnputil starten soll, doch es wird noch immer nicht gefunden.

ich frage einfach mal dreist ob du den pfad zu PNPUTIL vollständig angegeben hast?

meine Glaskugel sagt mir dass es was mit falsch gesetzten oder implizit angenommenen Arbeitsverzeichnissen zu tun hat

Demirug
2013-10-07, 18:08:53
Warum nimmst du nicht einfach die entsprechenden Funktionen anstelle solcher Hacks?

http://msdn.microsoft.com/en-us/library/windows/hardware/ff543637(v=vs.85).aspx

aths
2013-10-08, 11:09:00
ich frage einfach mal dreist ob du den pfad zu PNPUTIL vollständig angegeben hast?

meine Glaskugel sagt mir dass es was mit falsch gesetzten oder implizit angenommenen Arbeitsverzeichnissen zu tun hat
Von der Konsole aus funktioniert es ohne Pfadangabe. Ich kann auch versuchen, aus Delphi heraus mit vollem Pfad zu starten, er behauptet weiterhin, das Programm sei nicht vorhanden.

Warum nimmst du nicht einfach die entsprechenden Funktionen anstelle solcher Hacks?

http://msdn.microsoft.com/en-us/library/windows/hardware/ff543637(v=vs.85).aspx
Weil Delphi mir diesen API-Call nicht anbietet :(

Demirug
2013-10-08, 11:27:47
Weil Delphi mir diesen API-Call nicht anbietet :(

Zeit für eine richtige Programmiersprache. Aber soweit ich weiß kann Delphi auch Win32 calls binden. Ich habe aber mit Pascal aufgehört als es noch "Turbo Pascal für Windows" war.

Exxtreme
2013-10-08, 11:45:26
Gehen tut's offenbar schon mit bissl Aufwand:

http://www.delphipraxis.net/98503-treiberinstallation.html#post668602

aths
2013-10-08, 11:46:45
Zeit für eine richtige Programmiersprache. Aber soweit ich weiß kann Delphi auch Win32 calls binden. Ich habe aber mit Pascal aufgehört als es noch "Turbo Pascal für Windows" war.
Ich könnte wahrscheinlich einen stdcall extern deklarieren, wenn ich es hinkriegen würde, die Variablendeklaration 1:1 im Delphi-Format anzugeben. Diese Möglichkeit habe ich mir kurz angesehen, das krieg ich so aber nicht hin.

Gehen tut's offenbar schon mit bissl Aufwand:

http://www.delphipraxis.net/98503-treiberinstallation.html#post668602
Da fehlt leider der wichtigste Teil, die Deklarierung des API-Calls.

aths
2013-10-09, 09:49:54
In Windows 7 kann ich pnputils aufrufen. In Windows 8.1 zickt er rum, kann das Tool angeblich nicht finden obwohl es manuell startbar ist.

PatkIllA
2013-10-09, 13:14:48
In Windows 7 kann ich pnputils aufrufen. In Windows 8.1 zickt er rum, kann das Tool angeblich nicht finden obwohl es manuell startbar ist.
Das gehört doch eh zu einem Devolopment Kit und nicht zur Standardauslieferung. Zumindest unter Win7

MooN
2013-10-09, 14:11:08
system32 <-> SysWOW64?

aths
2013-10-09, 15:11:09
system32 <-> SysWOW64?
Pnputil.exe findet sich nur im System32-Ordner. Wenn ich es ohne Pfadangabe starten will, wird es ebenfalls nicht gefunden, obwohl es sich in der Kommandozeile ohne Pfadangabe starten lässt.


Das gehört doch eh zu einem Devolopment Kit und nicht zur Standardauslieferung. Zumindest unter Win7
Wie meinst du das?

hadez16
2013-10-09, 15:55:31
http://social.msdn.microsoft.com/Forums/vstudio/en-US/e6aeeb03-4ed1-4f56-93ed-06b8aac90e72/my-c-program-runs-fine-but-wont-run-in-the-system32-directory?forum=csharpgeneral

ohne jedes wort gelesen zu haben...vll hilft das weiter...

zwar C#, aber es klingt nach einer Win8-Eigenheit

MooN
2013-10-09, 16:45:17
Ich habe jetzt eigentlich eher daran gedacht, dass deine Anwendung evtl. unter 32bit läuft und dann entsprechend SysWOW64 (in dem die pnputil nicht vorhanden ist) als system32 behandelt.

aths
2013-10-10, 09:42:55
Ich habe jetzt eigentlich eher daran gedacht, dass deine Anwendung evtl. unter 32bit läuft und dann entsprechend SysWOW64 (in dem die pnputil nicht vorhanden ist) als system32 behandelt.
Ich lasse in der Tat eine 32-Bit-Anwendung in einem 64-Bit-Windows laufen. Wenn ich dort eine Bat-Datei starte, die ihrerseits pnputils aufruft, müsste das nicht funktionieren?

Kann man irgendwie, wenn man rein mit Bat-Dateien arbeitet, eine Bat-Datei mit Admin-Rechten aufrufen, ohne dass der User diese manuell mit Rechtsklick oder Verknüpfung starten muss? Delphi brauche ich streng genommen im Moment nur, um einen Prozess via ShellExecute-Parameter mit Admin-Rechten zu starten.

MooN
2013-10-10, 15:00:58
Ich lasse in der Tat eine 32-Bit-Anwendung in einem 64-Bit-Windows laufen. Wenn ich dort eine Bat-Datei starte, die ihrerseits pnputil aufruft, müsste das nicht funktionieren?

Nö.
Dadurch wird deine bat von der C:\Windows\SysWOW64\cmd.exe interpretiert.
Diese wiederum findet keine pnputils.exe, da die 32bit cmd.exe SysWOW64 als system32 behandelt. Und dort liegt keine pnputil.exe.

aths
2013-10-12, 20:10:30
Auch mit kompletter Pfadangabe klappt es komischerweise nicht. Die Bat kann direkt c:\windows\system32\pnputil.exe angeben, aber findet die Datei nicht obwohl sie dort liegt.

PatkIllA
2013-10-12, 20:30:24
Auch mit kompletter Pfadangabe klappt es komischerweise nicht. Die Bat kann direkt c:\windows\system32\pnputil.exe angeben, aber findet die Datei nicht obwohl sie dort liegt.
Unter 32 Bit wird C:\Windows\system32 nach C:\Windows\SysWOW64 umgeleitet und da liegt keine pnputil.exe

Da passieren noch einige andere Dinge. Auch bei RegistryEinträgen und dem Programmeordner muss man genau drauf achten was man macht.