Laden...

Starten von exe Datei aus System 32 Verzeichnis...

Erstellt von Renator vor 12 Jahren Letzter Beitrag vor 11 Jahren 7.158 Views
R
Renator Themenstarter:in
28 Beiträge seit 2011
vor 12 Jahren
Starten von exe Datei aus System 32 Verzeichnis...

Hallo,

ich versuche mich seit ein paar Tagen in c# reinzuarbeiten. Für den Anfang würde ich mir gerne ein kleines Tool schreiben mit den wichtigsten Funktionen die ich so verwende.
Unter anderem würde ich gerne das Snipping Tool von Windows 7 über einen Knopfdruck starten.

Ich HÄTTE mir das so vorgestellt:


            string pgm = @"\system32\SnippingTool.exe";
            string windir = Environment.GetEnvironmentVariable("SystemRoot");
            string start =  windir+pgm;
            System.Diagnostics.Process.Start(start);

Aber das mag er mir nicht ausführen. Mit der Begründung: Das System kann die angegebene Datei nicht finden.
Nur... sie ist genau da, wo die Variable Start angibt.

Ich vermute, dass nicht einfach jedes x-beliebige Programm Dateien aus dem System32 Verzeichnis ausführen darf... jemand eine Idee?

Danke!

B
357 Beiträge seit 2010
vor 12 Jahren

Hab hier auf der Arbeit leider nur einen XP Rechner, daher kein Snippingtool und auch keine UAC etc.

Allerdings mit regedt32.exe habe ich hier keinerlei Probleme. Evtl. mal unter den Projekteinstellungen -> Sicherheit -> Voll vertrauenswürdige Anwendung nachschauen?

Da es ansonsten unter XP geht, vermute ich aber ein Sicherheitsfeature von Win7... gemäß dem Fall, die Exe liegt wirklich da.

R
Renator Themenstarter:in
28 Beiträge seit 2011
vor 12 Jahren

Danke erst einmal. Ändert leider nichts. Geht nicht.

F
10.010 Beiträge seit 2004
vor 12 Jahren

Und was steht da in start?

Auch baut man dateinamen nicht so zusammen, benutze Path.Combine

B
387 Beiträge seit 2005
vor 12 Jahren

Hi,

ich würde Environment.GetFolderPath(..) verwenden. Lass dir mal ausgeben, worauf dein Pfad zeigt.. ich vermute mal stark, dass der falsch ist. Wäre es ein Berechtigungsproblem, so würde er einen anderen Fehler bringen.

Gruß
Roland

G
1 Beiträge seit 2011
vor 12 Jahren

Schau dich mal in der Rechteverwaltung um.
Hab alle Rechte mal vergeben. Hat auch nichts gebracht.
Ich kenn mich nicht gut mit TrustedInstaller aus aber soweit ich weis schützt er vor ungewolltem Zugriff.
In der Rechteverwaltung sitzt er auch mit drinnen.

Die Datei wird zudem auch nicht in einem OpenFileDialog gefunden.

~~Den Pfad würde ich so zusammenstellen.
Path.Combine ist mir nicht der richtige Weg, da ich der Methode einen string übergeben muss.

string pfad = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\SnippingTool.exe";~~

Hinweis von herbivore vor 12 Jahren

Dass du an Path.Combine einen String (üblicherweise zwei Strings) übergeben musst, ist kein Gegenargument, da du ja genau diese Strings hast. Auch Environment.GetFolderPath liefert einen String. Path.Combine ist anerkannt der richtige Weg und sollte (auch hier wie überall) verwendet werden.

R
Renator Themenstarter:in
28 Beiträge seit 2011
vor 12 Jahren

Hallo,

sorry, gestern keine Zeit mehr. Also die Variable wo rauskommt passt. Wenn ich diese so in den Explorer kopiere, kann ich das Snipping Tool ganz normal starten.

Irgendein anderer Workaround fällt sonst auch niemandem ein oder? Vielleicht gibt es ja noch irgendeinen speziellen Windows Befehl um das Snipping Tool gleich zu starten?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Renator,

unter Windows 7 heißen nicht alle Verzeichnisse so, wie der Explorer sie anzeigt. Das wäre eine mögliche Ursache. Du kannst das Fenster "Eingabeaufforderung" verwenden, um (z.B. mit dem Befehl "dir") nachzuschauen, wie die Verzeichnisse wirklich heißen.

herbivore

R
Renator Themenstarter:in
28 Beiträge seit 2011
vor 12 Jahren

Ja, sie heißen genau so wie es die Variable hergibt. Leider.

Ich vermute schwer, dass es wirklich irgend etwas mit den Rechten zu tun hat.

Beim Debuggen kommt zwar:
"System.ComponentModel.Win32Exception (0x80004005): Das System kann die angegebene Datei nicht finden"
aber es passt sonst alles!

Achso die Variable von Start: c:\Windows\system32\SnippingTool.exe

Aus der DOS-Box kann ich es auch direkt starten!

S
108 Beiträge seit 2012
vor 11 Jahren

Hallo,
muss das Thema einmal nach oben holen.

Habe mir eine Windows Forms Anwendung gebastelt, mit der ich gerne einen Befehl ausführen möchte.

Der Pfad ist definitiv korrekt, denn wenn ich diesen im Windows Explorer angebe, öffnet sich meine Exe.

Bekomme allerdings die Fehlermeldung:> Fehlermeldung:

Das System kann die angegebene Datei nicht finden

Kann doch nicht wahr sein! Bei meinem Nachbarn am anderen PC klappt es einwandfrei mit 1:1 dem gleichen Code und der Datei im system32 Ordner.

Woran könnte das liegen?

public static void SendMessage(string rechnername, string nachricht)
        {
            Process proc = new Process();

            proc.StartInfo.FileName = Environment.SystemDirectory + @"\PsExec.exe";
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.Arguments = "\\" + rechnername + " -i msg * " + nachricht;

            proc.Start();
            proc.WaitForExit();
            proc.Close();
        }

FileName = C:\Windows\system32\PsExec.exe

//edit: wenn ich cmd.exe eingebe, die im gleichen verzeichnis liegt, findet er diese. Schon komisch

Mit freundlichen Grüßen,
SeCuRiiTaS

F
10.010 Beiträge seit 2004
vor 11 Jahren

Und du hast nicht zufällig W7 64Bit?

S
108 Beiträge seit 2012
vor 11 Jahren

Genau das hab ich eben auch bemerkt und auf "Any CPU" gestellt statt "x86". Jetzt klappt es auch.

Mit freundlichen Grüßen,
SeCuRiiTaS