Laden...

[gelöst] Ping Exception Fehler beim Initialisieren via Netzfreigabe

Erstellt von fips_de vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.960 Views
F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
[gelöst] Ping Exception Fehler beim Initialisieren via Netzfreigabe

Hallo zusammen!

Ich habe das Problem, das ich eine Exception "Fehler beim Initialisieren: Während eriner Pinganforderung ist eine Ausnahme aufgetreten." bekomme, wenn ich das Programm über eine Netzwerkfreigabe (\computer\freigabe\programm.exe) aufrufe.
Kopiere ich das Programm auf eine lokale Festplatte klappt es ohne Probleme.

Das Programm soll prüfen, ob ein SQL-Server auf einen Ping anwortet, bevor eine SQL-Verbindung aufgebaut wird.


using System.Net;
using System.Net.NetworkInformation;
// [...]
try
{
     Ping myPing = new Ping();
     byte[] buffer = new byte[32];
     int timeout = 1000;
     PingOptions pingOptions = new PingOptions(64, true);
     PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);
     if (reply.Status == IPStatus.Success)
          MessegBox.Show("Ping OK");
}
catch (Exception ex)
{
     MessageBox.Show("Fehler beim Initialisieren: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
     Application.Exit();
}

Ich würde mich sehr freuen, wenn mir jemand helfen könnte, dieses Problem zu lösen.

Vielen Dank.

mfg Philipp Nicolai

F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
Weitere Details

Ich habe folgende Zeile ersetzt:

MessageBox.Show("Fehler beim Initialisieren: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);  
MessageBox.Show("Fehler beim Initialisieren:\n\n" + ex.Message + "\n\n" + ex.InnerException, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);

Durch die Information von ex.InnerException sind deutlich mehr Informationen vorhanden:

System.Security.SecurityException: Fehler bei der Anforderung des Benachrichtigungstyps System.Net.DnsPermissen, System, Version 2.0.0.0
[...]
Die Aktion, bei der ein Fehler aufgetreten ist:
Demand
Der Typ der ersten Berechtigung, bei der ein Fehler augetreten ist:
System.Net.DnsPermission
Die Zone der Assembly, bei der ein Fehler aufgetreten ist:
Internet

Jedoch gebe ich eine IP an, und keine URL bzw. Hostnamen. Die IP ist im Lokalen Netzwerk (LAN).

C
401 Beiträge seit 2007
vor 15 Jahren

Fang doch mal eine typisierte Exception (also direkt ne SecurityException) und guck dir die FirstPermissionThatFailed an. Also es bedeutet ja schonmal, dass du irgendwelche Rechte, die du für die Ausführung deiner Methode brauchst, nicht hast.

Hoffe das hilft dir ein bisschen weiter.

Gruß

Corpsegrinder

F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
SecurityException klappt nicht

Die Catchanweisung wirft leider keine Messagebox

catch ( System.Security.SecurityException ey)
{
     MessageBox.Show("Fehler Security:\n\n" + ey.FirstPermissionThatFailed + "", "Es ist eine Ausnahme aufgetreten", MessageBoxButtons.OK, MessageBoxIcon.Error);
     Application.Exit();
}
F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
Problem ist die CAS

Wenn ich in der Config vom Ausführenden PC die Rechte im .NET Framework änder, und damit Zugriffe über das Netzerk zulasse klappt das.

Kann ich irgenwie prüfen ob das Programm die nötigen Rechte auf dem Ausführenden Computer hat? Denn ich prüfe in einer Anwendung diverse Dinge. Da würde ich das dann beim Startup Mitprüfen lassen.

mfg Philipp Nicolai

F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
[gelöst] Prüfen der Rechte einer Anwendung bei Start via Netzlaufwerk

[EDIT=herbivore]Threads zusammengefügt[/EDIT]

Ich habe mir die FAQ zur Ausführung auf Netzlaufwerken schon durchgelesen.

[FAQ] Anwendung von Netzlaufwerk starten

Ich möchte jedoch in meiner .NET Framework 2.0 Anwendung beim Starten prüfen, ob das entsprechende Recht vorhanden ist.

Sollte dies nicht der Fall sein, so möchte ich gerne via Exception eine Vernünftige Infomeldung ausgeben können.

Kann mir jemand sagen wie ich das prüfen könnte?

Vielen Dank.

mfg Philipp Nicolai

3.825 Beiträge seit 2006
vor 15 Jahren

Hallo Philipp,

wenn Du keine Rechte auf dem Netzwerklaufwerk hast, um ein .NET Programm zu starten, dann kannst Du auch kein Programm in .NET ausführen, das dem Anwender sagt, dass er zuwenig Rechte hat.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
Das Programm startet

Ich habe das Problem, dass das Programm startet, aber bei einem Ping eine Exception wirft, da der Ping-command keine nötigen rechte hat.

Wenn ich versuche die Exception seperat zu erfassen gelingt mir das leider nicht.

Erst dachte ich, das es mit dem Pingcommand zu tuen hatte, daher habe ich erst hier das Problem beschrieben:
Ping Problem via Netzwerkfreigabe

Ich hoffe, das dort mein Problem detalierter beschrieben ist.

F
fips_de Themenstarter:in
14 Beiträge seit 2008
vor 15 Jahren
[gelöst] Problem ist die CAS

So klappt es nun - warum auch immer:

catch (System.Security.SecurityException ey)
{
     MessageBox.Show("Fehler Security:\n\nDie Rechte dieses Computers verhindern die Ausführung von einem Netzlaufwerk!\nBitte wenden Sie sich an Ihren Administrator.\nMögliche Lösung: CasPol.exe -q -m -ag 1.2 -url file:\\\\server\\dir\\ FullTrust\n\nDas Programm wird nun beendet.", "Es ist eine Ausnahme aufgetreten", MessageBoxButtons.OK, MessageBoxIcon.Error);
     statusok = false;
} 
catch (Exception ex)
{
     MessageBox.Show("Fehler beim Initialisieren:\n\n" + ex.Message + "\n\n" + ex.InnerException + "\n\n" + ex.HelpLink , "Es ist eine Ausnahme aufgetreten", MessageBoxButtons.OK, MessageBoxIcon.Error);
     statusok = false;
}
3.971 Beiträge seit 2006
vor 15 Jahren

Je höher die Vererbungstiefe desto höher muss die Exception stehen.

Bei Catch-Blöcken musst du zwingend auf die Reihenfolge achten. Die Basis-Klasse System.Exception muss als letzter Blöck angegeben werden, da drüber die jeweiligen abgeleiteten Klassen.

Eventuell macht es auch Sinn


bool statusOK = false;
try{
   // Kritischer Code
   statusOK = true
}
catch (System.xyz){
   //Messagebox
}
catch (System.Exception ex){
   //Log this
   throw; //Wichtig bei unbekannten Exceptions weiterwerfen
}
return statusOK;

zu verwenden.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...