Programm starten an manchen Rechnern nicht

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Programm starten an manchen Rechnern nicht

    Hallo zusammen,

    meine erste Anfrage in einem Entwicklerforum ich hoffe ich halte alle Richtlinien ordnungsgemäß ein.

    Folgendes Problem habe ich.

    Ich arbeite mit Visual Studio 2010 Express an einem Win 7 64 Bit Notebook Framework 3.5 Client.
    Mein Programm beinhaltet WMI-Abfragen über einzelne Hardware sowie IP-Adresse und MAC.


    Ich habe das Programm bisher an dem EntwicklerPC, meinem privat Gerät zu Hause und verschiedenen Geräten in der Arbeit getestet.
    An manchen PCs lässt sich die exe aus dem Debug-Ordner ohne Probleme starten an manchen stürzt sie ab mit folgender Windows-Fehlermeldung: " SystemInfo funktioniert nicht mehr Ein Problem hat die richtige Ausführung dieses Programms verhindert. Schließen Sie das Programm-"
    Ich hab auch ein Release probiert bei dem das Programm installiert wird aber die Fehlermeldung ist die selbe.

    Diese Fehlermeldung hilft mir leider absolut nicht weiter und stammt von einem PC ohne installiertes Visual Studio.

    Die PCs an denen es funktionierte hatten folgende unterschiedliche Konfigurationen und Eigenschaften:
    Alle Win 7, machne mit 32 manche mit 64 Bit
    User hatte lokale Administratorrechte
    User hatte keine lokalen Administratorrechte
    PC war in einer über GPO "regierten" Domäne
    Pc war in keiner über GPO "regierten" Domäne
    Netzwerkverbindung vorhanden
    Netzwerkverbindung nicht vorhanden
    Manche PCs hatten Visual Studio, manche nicht
    Framework sollte bei allen das richtige sein da 3.5 bei Win 7 mit installiert wird und ich das schon an einem frisch aufgesetzten Gerät getestet habe und bei diesem alles funktionierte
    Manche Pcs mit Service Pack 1 und manche mit 0


    Interessant ist vlt. auch das eingefügte Bilder aus mir unerfindlichen Gründen etwas gestuzt werden. Das heißt das vom Bild unten ca. 2 mm abgeschnitten werden. Dies kommt aber nur bei allen anderen Geräten vor bei dem PC an dem das Tool entwickelt wird passiert nichts.

    An diesem PC habe ich schon ein paar Anwendungen geschrieben welche aber auf anderen PCs liefen.

    Die WMI-Abfragen laufen über ausgelagerte Klassen die mit dem "mgmtclassgen.exe"-Programm erstellt wurden und in Visual Studio eingefügt wurden.
    In der Programmierung von Anwendungen bin ich realtiv neu. Nicht komplett aber noch ziemlicher Anfänger. Mit den eigenarten von Visual Studio hab ich nur wenig Erfahrung.

    Anbei noch eine typische Abfrage wie Sie in meinem Quelltext vorkommt.

    Source Code

    1. using System;
    2. using System.Windows.Forms;
    3. using System.Management;
    4. using ROOT.CIMV2.Win32;
    5. using System.Linq;
    6. namespace SystemInfo
    7. {
    8. public partial class Form1 : Form
    9. {
    10. public Form1()
    11. {
    12. InitializeComponent();
    13. classReader();
    14. networkFunction1();
    15. festplattenReader();
    16. }
    17. // Ändert die Größe der blauen Markierungen beim Veränderung der FormSize
    18. private void Form1_SizeChanged(object sender, EventArgs e)
    19. {
    20. blauerStrichOben.Width = this.Width;
    21. }
    22. // Methode zum Angeben aus der OperatigSystemClass
    23. private void classReader()
    24. {
    25. SelectQuery query = new SelectQuery("Win32_OperatingSystem");
    26. ManagementObjectSearcher nameSearcher = new ManagementObjectSearcher(query);
    27. foreach (ManagementObject result in nameSearcher.Get())
    28. {
    29. // Liest den OS-Namen aus ANFANG
    30. string osName = (string)result["Caption"];
    31. windowsVersionLabel.Text = osName;
    32. if (osName.Contains("Windows 7 Enter"))
    33. {
    34. windowsVersionLabel.Text = "Windows 7 Enterprise";
    35. }
    36. else if (osName.Contains("Windows 7"))
    37. {
    38. windowsVersionLabel.Text = "Windows 7";
    39. }
    40. else if (osName.Contains("XP"))
    41. {
    42. windowsVersionLabel.Text = "Windows XP";
    43. }
    44. else if (osName.Contains("Windows 8"))
    45. {
    46. windowsVersionLabel.Text = "Windows 8";
    47. }
    48. else if (osName.Contains("Windows Vista"))
    49. {
    50. windowsVersionLabel.Text = "Windows Vista";
    51. }
    52. else
    53. {
    54. windowsVersionLabel.Text = "Kein unterstütztes Windows";
    55. MessageBox.Show("Da dies kein unterstütztes Windows ist kann es zu Fehlern beim Ausleseforgang kommen");
    56. }
    57. //Liest den OS-Namen aus ENDE
    58. // Liest die Service Pack Nummer aus START
    59. UInt16 servicePackNumber = (UInt16)result["ServicePackMajorVersion"];
    60. servicepackLabelAusgabe.Text = "Service Pack " + servicePackNumber.ToString();
    61. // Liest die Service Pack Nummer aus ENDE
    Display All


    dies sind die ersten Zeilen, die if-Abfragen auf das Betriebssystem sind nicht wirklich professionell aber da wir in unserem Haus definitiv keine anderen Geräte vorfinden genügt diese Lösung.
    Fehlermeldung oder Warnungen gibts es in Visual Studio nicht.

    Vielen Dank schonmal an alle die sich Gedanken machen.

    Bis später,

    Fabian
  • starte das Ding doch mal von der Konsole aus, dann siehst du auch den StackTrace zu deinen bisher schwierig interpretierbaren Fehlermeldungen

    wenn das nicht geht (eigentlich gibt es dazu keinen Grund:)) dann schau mal was Google zu der Fehlermeldung zu Tage fördert - so kannst du eingrenzen wo die Exception herkommen kann

    Prinzipiell solltest du, wenn du auf .NET unterwegs bist, immer schauen, ob Funktionen/Methoden irgendwelche Exceptions werfen (und vor allem wann)

    Leider kennt die CLR keine checked-Exceptions wie das in Java der Fall ist oder auch in C++ (etwas anders (IMHO raw))

    Auf meinem Arbeitsrechner habe ich einen guten Link zum Thema pro & contra von checked exceptions; wenn der Bedarf besteht, kann ich den im Laufe der Woche noch nachreichen.

    [offtopic]
    ich selbst bin eher FÜR checked Exceptions
    [/offtopic]
  • Danke für die Hilfe!

    ich hatte heute Gelegenheit mir die Rechner an denen es nicht läuft genauer anzuschauen. Und alle hatten doch eins gemeinsam. Das WMI-Repository war defekt. In diesem Fall hab ich den Dienst einfach angehalten und die Repository Datei umbenannt und den Dienst neu gestartet (am besten alles via Console.) Und nun funktioniert das Tool auch dort.

    Ich hatte zuvor das Tool wie du gesagt hast über die Console gestartet, aber da kam keine Fehlermeldung. Hab ich das falsch verstanden? Ich hab einfach nur die Programm.exe via Cmd ausgeführt.
    Außerdem musste ich mich erstmal schlau lesen was checked Exceptions und StackTrace ist.
    Bau ich StackTrace einfach nur mittel Try/Catch in meine Anwendung ein?
    Gibt es Möglichkeiten Situationen wie meine Abzufangen? Bzw. macht das Try/Catch?
  • fla wrote:

    Ich hatte zuvor das Tool wie du gesagt hast über die Console gestartet, aber da kam keine Fehlermeldung. Hab ich das falsch verstanden?

    Jo, mein Fehler, mir fiel grad ein, dass die Ausgaben nur auf der Konsole landen, wenn im Studio das Projekt auf Konsolenanwendung gestellt ist - auch wenn du trotzdem WinForm- oder WPF Fenster hast.

    fla wrote:

    Bau ich StackTrace einfach nur mittel Try/Catch in meine Anwendung ein?

    Der Stacktrace ist immer eine Property der Execption - es kann vorkommen, dass die Exception noch InnerExceptions hat.
    Das VS zeigt das aber von sich aus an, wenn du die Exception nicht catchst; alternativ kannst du natürlich auch den Debugger im catch-Block halten lassen und das Objekt ausführlich examinieren.

    fla wrote:

    Gibt es Möglichkeiten Situationen wie meine Abzufangen? Bzw. macht das Try/Catch?

    Ja, dafür gibt es das catch - am besten du spielst mal ein wenig damit herum.
    Du kannst mit throw new Exception() selbst eine an einer beliebigen Stelle werfen. (Möglich wäre auch Thread.Current.Abort() oder so ähnlich)

    Sag, hast du auch festgestellt, dass einige WMI-Abfragen ziemlich lange dauern/ spät zurückkehren ?
    Ich hab da eine Anfrage an einen virtuellen Netzwerkadapter (VPN) die sich gerne mal 10 - 25 Sekunden zeit lässt.