Process.Start dauert sehr lange
-
Hallo,
aus meiner Anwendung heraus starte ich den Standardbrowser per
System.Diagnostics.Process.Start(url);
Der Aufruf dauert jedoch ca. 30 sek. Hat einer eine Idee woran das liegen könnte?
Danke,
bja
-
keine ahnung, aber man kann doch aus c#/.net-anwendungen heraus direkt winapi-funktionen aufrufen, ne? dann mach's mit 'CreateProcess()' oder einer ähnlichen winapi-funktion...
-
__fricky schrieb:
keine ahnung, aber man kann doch aus c#/.net-anwendungen heraus direkt winapi-funktionen aufrufen, ne? dann mach's mit 'CreateProcess()' oder einer ähnlichen winapi-funktion...
Macht keinen Sinn. Direkt können WinAPI Aufrufe aus C# nicht gemacht werden. Wenn dann z.B. über den P/Invoke Mechanismus.
Jedoch kappselt die Klasse Process und ihre Methoden um Prozesse zustarten ,genau CreateProcess(..) und ShellExecute(..).
Simon
-
Genau, und ich würde schon gern ShellExecute benutzen, weil ich eben der Shell das Rausfinden des Standardbrowsers überlassen möchte.
Seltsamerweise war es nicht immer so, vor 2 Wochen oder so gings flott. Leider ist der Code noch nicht im SVN-Repository, deswegen weiß ich nicht was sich genau geändert hat. Zu dumm, selbst schuld
Aber eigentlich wurde an dieser Stelle tatsächlich nur System.Diagnostics.Process.Start(url); aufgerufen. Es ist 100% nicht von der URL abhängig. "http://www.google.de" dauert auch lange. "c:\\test.txt" geht aber schnell, das heißt, dass es mit dem Browser zutun hat. Aber ob der IExplorer oder Firefox der Standardbrowser ist, macht keinen Unterschied. Beides dauert...Sonstige Ideen oder Vermutungen?
Danke
bja
-
Öffnet sich der Browser sich schneller wen die Url über ausführen aufrufts?
-
Ja, augenblicklich.
-
Ist denn das auf mehreren Systemen so?
-
Leider ja.
-
Kann sein, dass es mit den Sicherheitseinstellungen für die .NET Runtime zusammenhängt. Kenne mich aber nicht aus.
Simon
-
Also ich habe die Suche jetzt aufgegeben. Wir suchen uns den Browser-Pfad aus der Registry wie hier vorgeschlagen.
Also
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\http\shell\open\command"); string path=((string)key.GetValue("")).Split(' ')[0]; //hoffentlich steht im ersten teil der Pfad :) System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.UseShellExecute = true; p.StartInfo.FileName = path; p.StartInfo.Arguments = url; p.Start();
Man müsste noch Fälle berücksichtigen, wenn der Key nicht da ist oder leer, oder falsch, etc...
-
und das geht schneller?
-
Verwende ShellExecute(Ex) über PInvoke.
-
Simon: ja, ohne Verzögerung.
hustbaer: Danke werde das mal testen.
-
Wie lange dauert es wenn Du die URL bei Start -> Ausführen einklimperst ?
-
Andorxor schrieb:
Öffnet sich der Browser sich schneller wen die Url über ausführen aufrufts?
bja schrieb:
Ja, augenblicklich.
-
Tja, wer lesen kann ist klar im Vorteil. Thx