Hallo,
bin relativ neu in C#, habe allerdings Kenntnisse einiger anderer Programmier-/Codesprachen (PHP, C, Perl, VBA, etc.), und tue mich zwar noch schwer, bin aber weit gekommen und ein soweit gut lauffähiges Programm zu schreiben.
Ich stehe nun mit SharpDevelop 2.2 vor einem für mich scheinabr unlösbaren Problem und brauche unedingt Hilfe oder gute Tipps.
Ich habe ein Windows-Form Projekt generiert, in dem ich eine Formular öffne, dabei werden diverse Fehlersituation beim Starten abgefangen, ein Datenbankzugriff geöffnet und letztlich dem Anwender eine Suchmaske für die Datenbank angeboten. Das einzelne Suchergebnis wird im Ausgabeteil des Formulars (MainForm) ausgegeben. Technisch funktioniert es einwandfrei - wenn ich die kompilierte .EXE jedoch auf einem anderen PC, unter einem anderen Profil/Benutzerkonto ausführe, startet die .EXE einfach nicht (ist rund 1-2 Sekunden im Prozessmanager, und schliesst sich sang und klanglos). Als Anwender bekomme ich keinerlei Rückmeldung, warum.
Ich konnte den Fehler auf die Klasse für die Fehlerprüfung eingrenzen (wird beim öffnen der MainForm automatisch ausgeführt), befindet sich eine Funktion, in der ich 2 Schlüssel in der Windows-Registry prüfe. Kommentiere ich den Zugriff via "RegistryKey" aus, und kompiliere es, dann funktioniert das Programm auf anderen PCs - ich brauche den Zugriff auf die Windows-Registrierung allerdings zwingend. Die anderen PCs in unserem Netzwerk haben alle "Framework 4.0 Client" installiert und laufen alle auch auf WinXP x32.
Ich habe hier einmal den grundlegenden Code (reduziert auf des Pudels-Kern):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| using System; using System.Collections; using System.Drawing; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using Microsoft.Win32; namespace Suchprogramm { public partial class MainForm : Form { public MainForm() { InitializeComponent(); Ladebildschirm(); } private void Ladebildschirm() { this.tb_searchfield.KeyPress += new System.Windows.Forms.KeyPressEventHandler(keyPress); string db_version_client_path; string db_version_notebook_path; string db_version_client; string db_version_notebook; string szSrcLine; bool failure=false; ArrayList database = new ArrayList(); db_version_client_path = "\\\\PC0001\\HSdbC\\"; db_version_notebook_path = "\\\\PC0001\\HSdbM\\"; this.lb_db_count.Text="0"; this.lb_version.Text=GlobalClass.Version; Application.DoEvents(); [...] RegistryKey pathKey = Registry.CurrentUser.OpenSubKey("Firma").OpenSubKey("Zweigstelle"); string check = pathKey.GetValue("Bezeichnung").ToString(); pathKey.Close(); RegistryKey pathKey2 = Registry.CurrentUser.OpenSubKey("Firma").OpenSubKey("Gruppen"); string check2 = pathKey2.GetValue("SubAdmins").ToString(); pathKey2.Close(); [...] } } } |
Nehme ich den Teil zwischen denn beiden [...] raus, dann geht das Programm auf anderen Rechnern. -.-
Die Registry-Schlüssel sind aber ach auf anderen PCs da.
Mir ist klar, dass C# Referenzen und so manche DLL braucht. Ich habe allerdigns keine Ahnung, ob für "Microsoft.Win32" eine extra Referenz benötigt wird, oder wenn eine DLL, welche das sein soll. Habe nichts dazu im Netz gefunden. Im Release-Ordner generiert er mir lediglich eine .EXE (keine zusätzlichen DLLs oder andere Dateien, die ich mitverteilen müsste - Debugdateien hab ich generell ausgeschalten).
Die "mscorlib.dll" lasse ich mitreferenzieren. Ich habe auch schon probiert dasselbe Projekt auf Framework .NET 4.0 (+Clients) mit SharpDevelop 4.0 zu konvertieren und zu kompilieren - ohne Erfolg. Es bleibt beim selben Erscheinungsbild, dass die Anwendung einfach nicht startet, bzw. ohne das Formular anzuzeigen sich beendet.
Es muss höchstwahrscheinlich an einer fehlenden Referenz oder DLL liegen - ich hab aber leider keinen blassen Schimmer, welche.
hat jemand von euch eine Idee dazu?
Schonmal Danke für die Mühen und fürs Lesen
