C# xEcute - der smarte Programmstarter

Firestorm-

Lt. Commander
Registriert
Okt. 2006
Beiträge
2.015
Hi Leutz,

hab mich mal ein wenig an C# versucht... :) Hab ein Programmstarter namems xEcute geschrieben, welcher sich im Gegensatz zum Windows-Programmstarter vergleichsweise einfach administrieren lässt und ausserdem noch zusätzlich ein paar Features wie eine Google-, Wiki-, etc. Suche hat. Über Anregungen und Meinungen würde ich mich freuen. Screenshots im entsprechenden Artikel und eine ausführliche Featurebeschreibung folgen bald.

Der Link zum Tool: KLICK MICH!

Viele Grüße,
Alex
 
Zuletzt bearbeitet:
Firestorm- schrieb:
Dann kannst du dich faktisch eines Besseren belehren lassen.
Könnte er auch jetzt schon, den Code kann man sich auch einfach per Reflector anschaun ;)
Aber beim lesen seines Posts konnte ich mir ein Schmunzeln nicht verkneifen und er hat - das musst du wohl zugeben - den Nagel auf den Kopf getroffen.

Irgendwie hört sich das ganze für mich so an: "Hey, seht mich an, ich habe das Rad neu erfunden, welches nur noch mit einer Schraube am Auto befestigt ist und sich so leichter montieren lässt. Und außerdem habe ich zusätzlich ein paar nette Ecken eingebaut" ;)


Aber mal im Ernst, du solltest vllt. noch ne Möglichkeit einbauen auch andere Dateien indizieren zu lassen. Wär evtl. nicht schlecht wenn man per Hand Dateiendungen festlegen kann die indiziert werden.
Außerdem wäre es toll wenn der Output von cmd in ner (temporären) Textdatei gespeichert und gleich im Notepad geöffnet werden würde. Ist imo nützlicher als eine Textbox.

Ich habs zwar nicht ausprobiert, aber zumindest von den Screenshots her und der Beschreibung her scheint xEcute ja ganz durchdacht zu sein.
Wäre nett, wenn du es auch ohne Setup anbietest, dann würd ichs vllt. mal ausprobieren.
 
Naja Grantig, wie soll ich sagen, den Eindruck wollte ich sicher nicht erwecken.

An selbst definierbare Dateiendungen hab ich auch schon gedacht.. Werde mal überlegen wie sich das am Besten umsetzen lässt.

Welchen Vorteil siehst du in dem von der CMD generierten Output in ein txt-File? Geht es dir da eher um die Bearbeitung des Outputs an sich?
 
Naja Grantig, wie soll ich sagen, den Eindruck wollte ich sicher nicht erwecken.
Nimm mein Geschwafel nicht so ernst, ich rede viel (Mist) wenn der Tag lang ist ;)

Welchen Vorteil siehst du in dem von der CMD generierten Output in ein txt-File? Geht es dir da eher um die Bearbeitung des Outputs an sich?
Jap, bearbeiten und vor allem speichern. Bei "ping" macht das nicht so viel Sinn, aber bei sowas wie "dir" oder irgend ner Batch Datei dann schon.

Evtl kannst du ja ne Option einbauen: cmd output umleiten nach: Datei / MessageBox, dann kann der User selbst entscheiden wie er es haben will.

Und was mir grad noch einfällt: es wär auch nicht schlecht wenn man Programme direkt mit Admin Rechten ausführen könnte, z.B. per Präfix "admin:".
 
Finde deine beiden Vorschläge gut und werde sie demnächst einbauen.

Eine *.exe Version hab ich eben auch hochgeladen.

EDIT: Habe soeben Version 1.1. hochgeladen. (siehe Featurebeschreibung)
 
Zuletzt bearbeitet:
Erinnert mich an Launchy, eine der besten Tool ever. Daher erscheint mir dein Tool hier etwas ueberfluessig. Dennoch ein schoener Ansatz. Fuer Anregungen schau dir mal Launchy an ;)
 
Zuletzt bearbeitet:
Eine Art Gnomedo oder Synapse für Windows :)
 
@toxn
Ah genau an Launchy hat mich xEcute auch erinnert. Leider hatte ich den Namen vergessen.


@Firestorm-
Also ich habs jetzt mal ausprobiert, und hab ein paar Fehler gefunden:

1. Während der Indexierung ist xEcute nicht ansprechbar. Du solltest die Indexierung in nen anderen Thread auslagern um das zu vermeiden.

2. Damit die Einstellungen übernommen werden, muss man das xEcute erst beenden und dann wieder neu starten. Wieso?

3. Wenn ich xEcute beende, dann kommt ne Meldung, dass das Tool eventuell Administratorrechte benötigt. Wenn es wirklich so ist, dann solltest du das gleich ins Manifest einbinden, damit xEcute gleich beim Programmstart Adminrechte anfordert.

4. Als ich das erste Mal was suchen wollte kam gleich ne Fehlermeldung:

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at xEcute.SearchController.performSearch(Object sender, KeyPressEventArgs e)
at System.Windows.Forms.Control.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.BaseEdit.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.TextEdit.OnMaskBox_KeyPress(Object sender, KeyPressEventArgs e)
at System.Windows.Forms.Control.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.Mask.MaskBox.OnKeyPress(KeyPressEventArgs e)
at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.BaseWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.MaskStrategy.SimpleStrategy.DoWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.WndProc(Message& m)
at DevExpress.XtraEditors.TextBoxMaskBox.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
xEcute
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/xEcute.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
DevExpress.Utils.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Utils.v10.2.DLL
----------------------------------------
DevExpress.XtraEditors.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.XtraEditors.v10.2.DLL
----------------------------------------
DevExpress.Data.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Data.v10.2.DLL
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Seitdem kommt diese Fehlermeldung bei jedem Klick auf nen Button im Kontextmenü oder sonstiger Interaktion mit xEcute. Da liegt wohl noch einiges an Arbeit vor dir.
 
Zuletzt bearbeitet:
Oha, danke dir! Werde ich mir mal anschauen...

Edit:
1. Während der Indexierung ist xEcute nicht ansprechbar. Du solltest die Indexierung in nen anderen Thread auslagern um das zu vermeiden.
Erledigt.

2. Damit die Einstellungen übernommen werden, muss man das xEcute erst beenden und dann wieder neu starten. Wieso?
Das war ein Überbleibsel... Hatte ich vergessen zu entfernen.

3. Wenn ich xEcute beende, dann kommt ne Meldung, dass das Tool eventuell Administratorrechte benötigt. Wenn es wirklich so ist, dann solltest du das gleich ins Manifest einbinden, damit xEcute gleich beim Programmstart Adminrechte anfordert.
Adminrechte sollte xEcute nicht brauchen. Hast du UAC an? - Wundert mich gerade ein wenig... Hatte diese Meldung selbst auf einem Gast-Account nicht.

4. Als ich das erste Mal was suchen wollte kam gleich ne Fehlermeldung:
Kann ich mir leider nicht erklären und auch nicht reproduzieren. Versuch es bitte noch einmal.
Hab die überarbeitete Fassung hochgeladen.

Danke dir soweit!
 
Zuletzt bearbeitet:
Ein größers Icon wäre vllt auch noch interessant, denn unter Windows 7 ist es teilweise echt pixelig.
 
Ja, ich hab UAC an und auf höchster Stufe.

Hab jetzt die neu Version getestet. Besser als die alte, aber immer noch ein paar Fehler:

Beim Versuch "cmd" als Admin auszuführen (per admin:cmd):

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.InvalidOperationException: Cannot start process because a file name has not been provided.
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at xEcute.Utils.startProcess(String path, ProcessStartInfo arguments)
at xEcute.Actions.AdminExecuteAction.executeAction(String actionString)
at xEcute.Actions.AdminExecuteAction..ctor(String actionString)
at xEcute.SearchController.textBox_KeyDown(Object sender, KeyEventArgs e)
at System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
at DevExpress.XtraEditors.BaseEdit.OnKeyDown(KeyEventArgs e)
at DevExpress.XtraEditors.TextEdit.OnMaskBox_KeyDown(Object sender, KeyEventArgs e)
at System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
at DevExpress.XtraEditors.Mask.MaskBox.OnKeyDown(KeyEventArgs e)
at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.BaseWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.MaskStrategy.SimpleStrategy.DoWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.WndProc(Message& m)
at DevExpress.XtraEditors.TextBoxMaskBox.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
xEcute
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/xEcute.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
DevExpress.Utils.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Utils.v10.2.DLL
----------------------------------------
DevExpress.XtraEditors.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.XtraEditors.v10.2.DLL
----------------------------------------
DevExpress.Data.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Data.v10.2.DLL
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
n4zf4o13
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Data
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Danach, als ich versucht hab meine Eingabe zu löschen:

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentOutOfRangeException: Index and count must refer to a location within the string.
Parameter name: count
at System.String.RemoveInternal(Int32 startIndex, Int32 count)
at System.String.Remove(Int32 startIndex, Int32 count)
at xEcute.SearchController.performSearch(Object sender, KeyPressEventArgs e)
at System.Windows.Forms.Control.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.BaseEdit.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.TextEdit.OnMaskBox_KeyPress(Object sender, KeyPressEventArgs e)
at System.Windows.Forms.Control.OnKeyPress(KeyPressEventArgs e)
at DevExpress.XtraEditors.Mask.MaskBox.OnKeyPress(KeyPressEventArgs e)
at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.BaseWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.MaskStrategy.SimpleStrategy.DoWndProc(Message& m)
at DevExpress.XtraEditors.Mask.MaskBox.WndProc(Message& m)
at DevExpress.XtraEditors.TextBoxMaskBox.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
xEcute
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/xEcute.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
DevExpress.Utils.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Utils.v10.2.DLL
----------------------------------------
DevExpress.XtraEditors.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.XtraEditors.v10.2.DLL
----------------------------------------
DevExpress.Data.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute_v1.1.0/DevExpress.Data.v10.2.DLL
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
n4zf4o13
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Data
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Also das Exception Handling ist quasi nicht vorhanden.


Btw. wo speicherst du eigentlich den Dateiindex?
 
Hallo Grantig,

naja das Problem war halt dass ich jede Menge Exceptions im Code verbaut habe. Da ist es schon möglich dass ich hin und wieder was vergessen habe abzufangen. Danke dir für die Hinweise! Hab die Fehler gefunden und ausgebaut.
Werde noch ein Modul implementieren und dann eine neue Version online stellen.

Der Dateiindex ist intern ein Dictionary. Je nach Anzahl Elemente wollte ich aber eine obere Grenze einbauen. Sobald diese erreicht ist werden alle weiteren Inhalte in eine Datei geschrieben. Fraglich ist, ob es sinnvoll das zu tun, weil schlichtweg bei vielen Dateiinstallationen und Deinstallationen und auch wenn weitere Dateitypen(Dateiendungen) indexiert werden, die Änderungen einfach viel zu groß werden und nicht mehr effektiv aktuell gehalten werden können. Von daher macht es in meinen Augen maximal als optionales Feature Sinn. Siehst du das auch so?

Danke fürs reporten, Grantig!
 
Freut mich, wenn ich helfen kann^^

Das Dictionary ist schonmal ein guter Ansatz. Aber trotzdem "lagt" xEcute ein kleines bisschen bei der Eingabe (wenn man schnell tippt).
Und umso größer der Index, desto größer wird wohl auch die Verzögerung werden.

Es wäre evtl. besser bei der Eingabe erst Abzuwarten, bis der User fertig ist (am einfachsten imo per Timer lösbar).
Außerdem kannst du auch die Abfrage selbst in nen eigenen Thread auslagern (was vllt. nicht ganz einfach ist, aber machbar).
Evtl. lohnt es sich auch statt nem Dictionary ne Datenbank einzusetzen, gerade wenn der Index dann mal größer ist. (was ja der Fall wäre, wenn du dem User erlaubst noch weitere Dateitypen indizieren zu lassen)
SQLite wäre imo perfekt dafür geeignet.

Edit:
Generell ist es imo besser, den Index nicht bei jedem Start komplett zu erneuern, sondern ihn lokal zu Speichern und nur immer zu aktualisieren.
Außerdem wäre es imo auch nicht schlecht, wenn xEcute während der Laufzeit erkennt, wenn sich in den überwachten Verzeichnissen was ändert. Das geht auch sehr einfach per FileSystemWatcher.
 
Zuletzt bearbeitet:
Der kleine Lag beim Anstoßen der Suche ist natürlich abhängig von der Größe des Indexes. Es müssen nunmal n Elemente durchlaufen werden. Die Komplexität lässt sich also nicht maßgeblich verbessern, zumal man ja kein Sortierkritierium hat was sich sinnvoll auf alle Dateinamen anwenden lässt.

Die Suche erst zu starten sobald der User fertig ist mit der Eingabe war auch eine Frage mit der ich mich zu Beginn beschäftigt habe. Hinten raus wäre die Suche vermutlich schneller, ja, allerdings würde ich dann nicht mehr den IntelliSense-Effekt erreichen, welcher ein Muss-Kriterium für mich war.

Eine Datenbank, hmm... Ich bin immer noch der Meinung dass ich bei ca. 1000 Elementen im Index ca. 4MB verbrate, ein on-the-fly-Auslesen aus der Daba ein Ticken langsamer ist als direkt aus dem Adressraums des Prozesses im RAM. Deshalb bin ich von vorne rein nicht auf eine Daba gegangen.

Das inkrementelle Aktualisieren des Dateiindexes war auch mein Gedanke. Da es mein erstes C# Projekt ist fehlt mir noch ein wenig das Komponentenwissen... :) Ich werde mir den FileSystemWatcher mal anschauen. Danke für den Tip!

Ich plane gerade noch eine Anbindung an Twitter als weiteres Feature. Vielleicht auch noch an andere Soziale Netzwerke, mal sehen..
 
Mit dem Lookup zu warten, bis der User fertig ist, ist auch eher die Quick & Dirty Lösung.

Im Moment ist das Dictionary die beste Wahl, aber sobald du den Benutzer entscheiden lässt, welche Dateien indiziert werden sollen, wird dieser Ansatz relativ viel Speicher fressen und die Lags werden zunehmen.
Imo wäre eine (SQLite) Datenbank trotzdem die beste Lösung. Um die Abfragen zu beschleunigen kannst du ja die Daten cachen. (siehe System.Runtime.Caching, v.a. die MemoryCache Klasse)


Es bleibt natürlich deine Entscheidung, wie du die ganze Sache umsetzt, aber imo wäre es auf jeden Fall ein must have die Abfrage in nen extra Thread auszulagern, der dann die Liste der Suchergebnisse aktualisiert. Damit fällt der Lag weg, aber der Intellisense Effekt bleibt.
 
So hab soeben die aktuelle Version 1.1.4 hochgeladen.

Ich habe deine Idee selbst individuell Dateieendungen festzulegen mit eingebaut, Grantig.

Ausserdem kann xEcute nun auch Twittern (siehe Doku).

Hab zwar jetzt ein paar Stunden nach Fehlern gesucht und denke alles gefunden zu haben, aber ich bin mir sicher Grantig, du findest wieder den einen oder anderen... :)

Achja und nen größeres Icon mach ich auch wenn ich ein wenig mehr Zeit habe... :)
 
Zuletzt bearbeitet:
Hab zwar jetzt ein paar Stunden nach Fehlern gesucht und denke alles gefunden zu haben, aber ich bin mir sicher Grantig, du findest wieder den einen oder anderen...
Ich legs zwar wirklich nicht drauf an (wirklich!), aber ich hab wieder ein paar Fehler gefunden :D

1. Wenn ich neue Ordner oder Dateiendungen hinzufüge, dann dauerts immer ewig, bis die auch in der ListBox angezeigt werden.

2. Nachdem ich die Einstellungen verändert und gespeichert hab, wollte ich nochmal den Einstellungen Dialog aufrufen, aber es gab nen Fehler:

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at xEcute.SettingsController..ctor(Model inModel, SettingsView inView)
at xEcute.SearchController.einstellungenToolStripMenuItem_Click(Object sender, EventArgs e)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
xEcute
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute/xEcute.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
DevExpress.Utils.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute/DevExpress.Utils.v10.2.DLL
----------------------------------------
DevExpress.XtraEditors.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute/DevExpress.XtraEditors.v10.2.DLL
----------------------------------------
DevExpress.Data.v10.2
Assembly Version: 10.2.3.0
Win32 Version: 10.2.3.0
CodeBase: file:///C:/Users/Stefan/Downloads/xEcute/DevExpress.Data.v10.2.DLL
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
lhbdgeh3
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 built by: RTMRel
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Data
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Von da an trat dieser Fehler jedes mal auf, wenn ich die Einstellungen aufrufen wollte.

3. Während der Indexierung ist das Suchfeld nicht ansprechbar (ch dachte du hast die Indexierung in nen eigenen Thread ausgelagert?)

4. Während der Indexierung ist xEcute einmal einfach abgeschmiert:

Problemereignisname: CLR20r3
Problemsignatur 01: xecute.exe
Problemsignatur 02: 1.0.0.0
Problemsignatur 03: 4d75765e
Problemsignatur 04: mscorlib
Problemsignatur 05: 4.0.0.0
Problemsignatur 06: 4ba1da6f
Problemsignatur 07: 214
Problemsignatur 08: 10
Problemsignatur 09: System.ArgumentException
Betriebsystemversion: 6.1.7601.2.1.0.768.3
Gebietsschema-ID: 1031
Zusatzinformation 1: 0a9e
Zusatzinformation 2: 0a9e372d3b4ad19135b953a78882e789
Zusatzinformation 3: 0a9e
Zusatzinformation 4: 0a9e372d3b4ad19135b953a78882e789
 
Grantig schrieb:
Ich legs zwar wirklich nicht drauf an (wirklich!), aber ich hab wieder ein paar Fehler gefunden :D
Haha :) Ne im ernst: Ist doch super! Das hilft die Qualität zu verbessern...

Grantig schrieb:
1. Wenn ich neue Ordner oder Dateiendungen hinzufüge, dann dauerts immer ewig, bis die auch in der ListBox angezeigt werden.
Japp. Das hängt aber an der Komponente an sich. Ich finde das Verhalten auch etwas komisch, kann es aber leider nicht beeinflussen.

Grantig schrieb:
2. Nachdem ich die Einstellungen verändert und gespeichert hab, wollte ich nochmal den Einstellungen Dialog aufrufen, aber es gab nen Fehler:
Hatte ich bisher noch nie, werde aber mal danach schauen... Weisst du noch welche Einstellung du verändert hast?

Grantig schrieb:
3. Während der Indexierung ist das Suchfeld nicht ansprechbar (ch dachte du hast die Indexierung in nen eigenen Thread ausgelagert?)
Japp hab ich. Ist auch gewollt so, denn ich kann nicht einen Index neu aufbauen auf den ich gerade zugreife.. Das könnte schnell schief gehen, deshalb liegt auf dem Dicitionary ein Lock bis die Indexierung fertig ist.

Grantig schrieb:
4. Während der Indexierung ist xEcute einmal einfach abgeschmiert:
Hast du neue Dateiendungen hinzugefügt? Ich hab alle möglichen Endungen ausprobiert und hatte bei der Endung *.png bei genau einer Datei immer ein Problem. Ich bin mir aber sicher dass das Problem nicht an xEcute liegt, sondern am Dateisystem, allerdings in meinem Fall. Wenn du mir deine Einstellungen sagst, versuch ichs zu reproduzieren.

Danke dir! :)
 
Zurück
Oben