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!
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.
Und was steht da in start?
Auch baut man dateinamen nicht so zusammen, benutze Path.Combine
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
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";~~
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.
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?
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
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!
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
Genau das hab ich eben auch bemerkt und auf "Any CPU" gestellt statt "x86". Jetzt klappt es auch.
Mit freundlichen Grüßen,
SeCuRiiTaS