Laden...

Forenbeiträge von cmpxchg Ingesamt 192 Beiträge

05.05.2006 - 13:54 Uhr

Hallo, ich habe einen Server programmiert, der auf eine MSSQL Datenbank zugreift.
Einen Tag läuft es aber irgendwann am Morgen (ca. 4 Uhr) wird die Verbindung getrennt. Ich kann sie dann nicht mehr öffnen. Warum? Was kann ich da machen?
Ich bin für jede Hilfe dankbar.

Hier ist der Code zum öffnen einer Verbindung. Immer, wenn die Verbindung geschlossen ist, versuche ich hiermit die Verbindung wieder zu öffnen. Ich verwende server1 als Hostname, sa als Username und kein Passwort. Schlägt der Verbindungsversuch fehl, so warte ich erst 10s dann 30s dann 60s. (Ich dachte das könnte helfen) aber leider tut es dies nicht. Was kann ich da machen?

Ich bin für jede Hilfe dankbar.


		public override bool Open()
		{
			try
			{
				
				lock(OPENLOCK)
				{
					if(realOpen() == true) return true;
					int sec;
				
					sec = 10;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;

					sec = 30;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;

					sec = 60;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;
					return false;
				}
			}
			catch(Exception ex)
			{
				this.sqlLiteDB.logError("Can't connect to SqlServerDatabase. Exception follows","SqlServerConnection.Open()");
				this.sqlLiteDB.logException(ex);
				return false;
			}
		}
		private bool realOpen()
		{
			try
			{
				string connectionString = "Server="+this.hostname+";";
				connectionString+= "Database="+this.database+";";
				connectionString+= "User ID="+this.username+";";
				if(!(this.password == null || this.password == ""))
				{
					connectionString+= "Password="+this.password+";";
				}				
				
				this.conn = new SqlConnection();
				this.conn.ConnectionString = connectionString;
				if(Globals.DEBUG) Console.Out.WriteLine(connectionString);
				this.conn.Open();
				
				return true;
			}
			catch(Exception ex)
			{
				this.sqlLiteDB.logError("Can't connect to SqlServerDatabase. Exception follows","SqlServerConnection.Open()");
				this.sqlLiteDB.logException(ex);
				return false;
			}
		}

03.04.2006 - 11:40 Uhr

Freilich beenden die. Die meisten aufrufe resultieren sofort in ein return

03.04.2006 - 11:06 Uhr

zuviele bedeutet ca. 30000 Instanzen, aber es werden immer mehr

03.04.2006 - 11:03 Uhr

Hallo,
ich habe folgendes Problem: Ich habe mit einem Memory Profiler festgestellt, dass mein Programm zu viele Threads im Speicher hält.

Prinzipiell starte ich die Thread auf 2 Weisen:


...
public void start()
{
Thread thread = new Thread(new ThreadStart(this.machewas));
thread.Start();
return;  // Hier das return, damit der GC den Thread irgendwann wieder vom Speicher entfernt
}
...

oder so:


...
public void start2()
{
ThreadPool.QueueUserWorkItem(new WaitCallBack(this.machewasandres));
return;
}

Im ersten Fall habe ich dann zu viele Instanzen von class Thread im Speicher und im zweiten Fall zuviele instanzen von WaitCallBack

Zu Testzwecken starte ich alle 500ms einen neuen Thread, der Speicher ist dann in kürzester Zeit voll.

Was kann ich da tun um die Klassen vom Arbeitsspeicher zu entfernen? Ich bin für jede Hilfe dankbar

Danke

27.03.2006 - 16:04 Uhr

Überlauf?

Es gibt auch keine Exception (nur so zur anmerkung)

27.03.2006 - 15:47 Uhr

Es ist ohne GUI.

Ja, das Programm hat ca. 1 Woche laufzeit, also keine Neuübersetzung e.t.c.
Eine Woche ununterbrochene Laufzeit.

Es handelt sich um einen Server, der Periodisch Backups macht


zu dem windows.Forms.Timer: Warum sollte der Günstiger sein?

27.03.2006 - 15:41 Uhr

Hallo,
ich verwende in meinem Projekt den System.Timer.Timer. Ich hab da ein Intervall gesetzt, so 20ms, und lasse ihn laufen. Das Elapsed-Ereignis wird immer brav ausgelöst.

Warum aber wird das Elapsed-Ereignis plötzlich bei mir nicht mehr ausgelöst? Ich verwende kein Stop() und setze auch nirgends Enabled auf false.
So eine Woche lang funktioniert alles wunderbar und dann irgendwann kommen die Ereignisse nicht mehr.

Was kann denn das sein?

Ich bin über jeden Ratschlag dankbar

27.03.2006 - 10:25 Uhr

Hallo,

ich hab ein Multicast-Delegate für ein Ereignis programmiert. Andere Objekte verwenden dieses Ereignis. Doch jetzt möchte ich jede Methode, die dieses Ereignis empfangen will, in einem eigenen thread starten.
(So ähnlich wie der System.Timer.Timer. Der startet auch immer das Elapsed-Ereignis in einem Thread)

Wie kann ich denn jede, in dem delegate registrierte Methode, in einem separaten Thread laufen lassen?

Danke

21.03.2006 - 09:53 Uhr

Ich suche doch den kostenlosen von Microsoft.

21.03.2006 - 08:18 Uhr

Wo finde ich den Memory Profiler für .NET?

20.03.2006 - 17:03 Uhr

Ich brauche es zur Fehlersuche: Mein Serverprogramm verbraucht 1,2GB RAM.
Doch warum?
Bevor ich da vermutungen anstelle, will ich erstmal testen, ob dieser wert realistisch ist, weil er wirklich belegt wird, oder ob nur der GC den Speicher nicht freigibt.
Ausserdem will ich damit feststellen, welche Teile wie viel Speicher belegen und somit die Speicherauslastung optimieren.

20.03.2006 - 14:41 Uhr

Hallo,
gibt es eine möglichkeit den Speicherverbrauch von objekten zu bestimmen?

Im konkreten fall hab ich eine ArrayList, die gefüllt ist mit Strukturen.
Ich will also den Speicher, den die ArrayList für die Verwaltung braucht und die Summe des Speichers, die jede Struktur belegt.

Danke im Voraus für die Hilfe

20.03.2006 - 14:04 Uhr

Sowas hab ich mich auch schon oft gefragt. Ich denke da musst du die Thunderbird Entwickler direkt ansprechen, also in den richtigen Foren fragen. Da wissen sie soetwas.

Wenn dus rausgefunden hast, so sage mir bitte auch bescheit, ich will es auch wissen

danke

20.03.2006 - 10:05 Uhr

Die Exception ist nicht Reproduzierbar, ich hab zum Glück eine Zweite Exception, die bei DateTime.Subtract nicht gefangen wurde. Vielleicht finde ich darüber den Grund.

Wer kann mir denn tips geben, so eine Exception zu finden?

In dem Programm sind noch 2 seltsame sachen:

  1. Einer meiner Timer, löst keine Ereignisse mehr aus, obwohl Enabled = true ist. Ich muss nocheinmal Start() aufrufen, wenn das Programm eine TCP-Verbindung annimmt

  2. Ich hatte eine Meldung, dass das Programm eine Resourcendatei nicht laden kann, obwohl ich keine GUI verwende (also nichtmal System.Windows.Forms referenziere)

Weis jemand, in welchem Zusammenhang das ganze Stehen könnte?

danke

20.03.2006 - 09:20 Uhr

Tja eben das ist es ja....

Ich bin gerade dabei die Exception zu Reproduzieren und den Code der Stelle suche ich gerade.

Sollte ich lieber die Runtime Version 1.1 verwenden?

20.03.2006 - 08:52 Uhr

Hallo ich hab eine Exception, kann mir jemand helfen, was ich da zun soll?
Aus den ganzen daten folgere ich, dass diese Exception auftritt, wenn ich Zwei DateTime-Werte voneinander Subtrahiere. Die Informationen folgen unten:

TargetSite: System.DateTime op_Subtraction(System.DateTime, System.TimeSpan)

source: mscorlib

Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Type: System.AccessViolationException

StackTrace: at System.DateTime.op_Subtraction(DateTime d, TimeSpan t) at System.CurrentSystemTimeZone.GetUtcOffsetFromUniversalTime(DateTime time, Boolean& isAmbiguousLocalDst) at System.CurrentSystemTimeZone.ToLocalTime(DateTime time) at System.DateTime.ToLocalTime() at System.DateTime.FromFileTime(Int64 fileTime) at System.Timers.ElapsedEventArgs..ctor(Int32 low, Int32 high) at System.Timers.Timer.MyTimerCallback(Object state) at System.Threading._TimerCallback.TimerCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading._TimerCallback.PerformTimerCallback(Object state)

P.S. Ich werde nur sicheren verwalteten code und das Programm wurde mit 1.1 geschrieben (verwendet aber die 2.0 runtime). Also laut msdn darf ich diese Exception nicht erhalten

15.03.2006 - 08:39 Uhr

Hallo,
ich habe mit c# einen Dienst programmiert, ich will aber jetzt, dass er beim Start eine MessageBox oder eine Form anzeigt, wenn ein Fehler aufgetreten ist.

Wie funktioniert das? Geht das überhaupt?

Danke

14.03.2006 - 09:59 Uhr

Probiere doch mal soetwas in deiner Main-Methode:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

und dann in der Event-Methode:


private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{
	Exception ex = e.ExceptionObject as Exception;
        if(ex != null) Console.WriteLine(ex.ToString());
}

Dann bekommst du garantiert jede Exception zu gesicht. Vorallem bei Threads ist dies sehr Praktisch

13.03.2006 - 11:16 Uhr

Hallo,
wie kann in in c# die GUI schneller aufbauen lassen?
Wenn ich eine Form mit vielen controls öffne, kann ich sehen, wie sie nacheinander erscheinen (das geht aber sehr schnell). Ausserdem habe ich so flicker-Effekte beim Resizing.

Wie kann ich dies Verbessern? Ich hab mal bei der Form DoubleBufferer auf true gesetzt, aber keine Verbesserung.

  1. Habe ich einen Algorithmus, der umständerhalber einen Button auf Enabled, dann auf Disabled (Enables = false), dann wieder auf Enabled setzt. Dies erzeugt auch einen flickereffekt, obwohl ich davon ausging, dass die Form nicht neu gezeichnet wird (weil diese 3 zuweisungen innerhalb einer Methode passieren)

Was kann ich da machen um dies zu Verbessern? Danke

07.03.2006 - 11:46 Uhr

Hallo,

warum ist die Parse-Methode in einem enum unsichtbar? Also:


public enum ABC
{
a,b,c,d,e
}

void do()
{
  string name = "b";
  ABC abc = (ABC) ABC.Parse(typeof(ABC),name);

  abc == ABC.b;
}

Kann ich die in Visual Studio auch irgendwie sichtbar machen? Hat ein enum noch mehr für IntelliSense unsichtbare Methoden?

danke

06.03.2006 - 17:07 Uhr

danke

06.03.2006 - 16:39 Uhr

Hallo ich habe folgenden Code:



public enum Buchstaben
{
 a, b, c, d, e
}


ich kann auch darüber iterieren:


for(Buchstaben b = (Buchstaben) 0; b < (Buchstaben) 5; b++)
{
...
}

// oder mit
for(Buchstaben b = Buchstaben.a; b <= Buchstaben.e; b++)
{
...
}

aber wie geht es am elegantesten?

Danke

06.03.2006 - 11:34 Uhr

Das ist ganz leicht, daher erkläre ich es an einem Beispiel:


public class Global
{
   public static int eineZahl = 10;
   public static void macheWas()
   {
   }
}

// in .NET 2.0 gehts auch so:
public static class Global
{
  // wie oben...
}

Also du brauchst das Schlüsselwort static
Zugreifen kannst du dann von überall aus mit Global.macheWas() oder mit Global.eineZahl = 5;

P.S. Das ist das Singleton entwurfsmuster

01.03.2006 - 10:23 Uhr

Was macht denn CanOpen?

28.02.2006 - 10:00 Uhr

Du wist doch eine Sql-Anweisung bauen.
Warum lässt du die Guid nicht einfach weg, wenn in dem dataSet Guid.empty gespeichert ist?

17.02.2006 - 10:17 Uhr

Verwende doch mal einen konstanten Seed-Wert. Dann ist die Zufallsfolge reproduzierbar.

Du solltest wicklich nicht jedesmal ein neues Random-Objekt instanziieren, weil du dann immer einen neuen Seed-Wert nimmst. Der genaue Wert ist unbekannt und wenn .NET intern seinen Seed-Wert aus der Uhrzeit ableitet, kann es sein, dass du immer den gleichen verwendest.
Naja, und 2 gleiche Seed-Werte bewirken, dass das Random.Next immer gleiche Werte ausspuckt.

Das console.WriteLine ist sau langsam, da vergeht viel Zeit -> neuer SeedWert.
Ohne console.WriteLine vergeht wenig Zeit -> gleicher Seed wert und Zufall ist futsch

17.02.2006 - 10:08 Uhr

Hallo,
ich habe ein Programm mit .NET 1.1 entwickelt. Kann ich dafür .NET 1.1 erzwingen, wenn auf dem Rechner .NET 2.0 installiert ist?

04.02.2006 - 13:43 Uhr

Hallo, ich erlebe gerade einen seltsamen effekt:

Ich hab einen Timer, der alle 30s eine datei überprüft.
Parallel dazu verwaltet das Programm TCP-Verbindungen.

Unter Windows XP funtioniert alle einwandfrei aber unter Windows 2003:
Der Timer funtioniert, bis ich eine TCP-Verbindung aufgebaut habe. ab da löst der Timer keinen Elapsed-Ereignis mehr aus. (Es ist der System.Timers.Timer). Dieses verhalten ist aber nur im Release-Modus und nur unter Win2003. Im Debug-Modus funktioniert alles wunderbar.

Hat jemand schonmal soetwas erlebt?
Kann mit jemand einen Hinweis geben, was ich da machen könnte?

P.S: .NET Version 1.1

27.01.2006 - 13:14 Uhr

Original von FZelle
Du erzeugst Ständig neue Objekte, die erst "weggeräumt" werden, wenn der GC
anfängt Aufzuräumen.

Das passiert aber erst, wenn Windows sagt das der Speicher eng wird.

Wo erzeugt er denn objekte?

26.01.2006 - 12:54 Uhr

Greift du denn in einem solchen System.Timer.Timer-Thread auf einige Controls deiner GUI zu? Wenn ja, das musst du schleunigst vermeiden

26.01.2006 - 08:22 Uhr

Aber den Befehl Top würde ich nicht verwenden. Verwende lieber ps
das kommando ps beendet, wenn es seine Arbeit getan hat.

Namespace:

using System.Disgnostics

(oder schau in der msdn zu Process)

Tip:
Ich bin ein absuloter LinuxGuru, aber: Entwickle dein Programm lieber mich Visual c# Express 2.0 unter Windows. Da tust du dich viel leichter. Du musst nur auf den System.Windows.Forms-Namespace verzichten. Das fertige programm wird dann problemlos mit Mono unter Linux kompilieren.

Wenn du fragen zu Linux und mono hast, schreibe mir ruhig private nachrichten, ich helfe gerne weiter

25.01.2006 - 10:19 Uhr

genau, siehe .unreal

Du musst aber in der Basisklasse noch virtual verwenden

also

public virtual void DisconnectDB();

oder

public abstract void DisconnectDB();

25.01.2006 - 10:16 Uhr

Naja, jede Variante hat ihre eigenen Vor- und Nachteile

Valiante 1:

  • Das ist halt Performance-geschichte. Wenn du eine Webseite abfrägst, dauert die
    Abfrage evtl. 2min (kann im idealfall passieren), also sollte der Timer gestoppt
    werden.
  • Den Timer-neustart schreibst du in den finally-Block von try!
  • Ich halte es für einfacher zu implementieren als Variante 2

Variante 2:

  • Timerneustart kommt in finally-Block
  • Performance Sparend
  • komplizierter zu programmieren, weil du Spiele, die in der Vergangenheit liegen
    überspringen musst.
  • Deine Uhr muss richtig gehen
  • Es könnten 2 Spiele zur gleichen Zeit starten
  • Was ist, wenn ein spiel vorverlegt wird?

Ich hab selber in einem meiner Projekte Variante 2 programmiert.

Welchen Timer wirst du verwenden? 1. System.Windows.Forms.Timer? oder 2. System.Timers.Timer?

Denke daran: System.windows.Forms.Timer läuft NICHT im thread
System.Timer.Timer aber SCHON! also die Methode, die das Elapsed-Ereignis verarbeitet läuft in einem eigenen Thread!

25.01.2006 - 09:07 Uhr

Hallo,

Bei einem Dateizugriff, wo die Datei nicht geöffnet werden konnte: Kann ich den Prozessnamen herausfinden, der auf die Datei zugreift?

Danke

23.01.2006 - 11:59 Uhr

Das musst du in CWorker erledigen



CWorker::bekommeBoss(CBoss boss)
{
  this.bossarray.add(boss);
  this.ReportProgress += new ReportPrograssEventHander(boss.report);
}

bei einem Aufruf von this.ReportProgress() wird dann die Methode boss.report() einer jeden instanz aufgerufen

Wenn du eine genauere Antwort willst, musst du genauer fragen. Mit sources beispielsweise

23.01.2006 - 11:55 Uhr

Snmp-Traps verwenden einen anderen Port. Die Portnummer von Snmp-Trap ist um 1 höher als die von Snmp

23.01.2006 - 11:54 Uhr

Ja, das wird ja auch so gemacht. In der Praxis wird Mehrfachvererbung mit Hilfe von Schnittstellen und Aggregationen umgangen.

23.01.2006 - 10:02 Uhr

In c# gibts keine Mehrfachvererbung. Ein solches Problem musst du mit Interfaces lösen.

Ich verwnde Interfaces, wenn ich Klassen bestimmte eigenschaften geben möchte. Wie z.B. istInDatenbankAbspeicherbar, istProtokollierbar, istMitTCPVersendbar....

Vererbung gebrauche ich, wenn ich sage, dass eine Klasse etwas anderes ist
Ein Auto ist ein Fahrzeug.

Ich hab da ein Beispiel:

ein Auto is ein Fahrzeug -> Vererbung
ein fahrrad is ein Fahrzeug -> Verergung
ein Auto ist Reparierbar -> Interface
ein Auto ist Blitzbar (von der Polizei weils zu schnell ist) -> Interface
ein Fahrrad ist NICHT Blitzbar ->
ein Motorrad ist ein Fahrzeug -> Vererbung
ein Motorrad kann geblitzt werden -> Interface
....
....
....

Ausserdem solltes du mit .NET Remoting immer Interfaces verwenden. Das erleichtert das Deployment von Software

19.01.2006 - 13:10 Uhr

Naja, wie bekommt denn eine Exception die Information, wo die selber auftrat?

bei

catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}

steht doch auch die Zeilennummer da

19.01.2006 - 11:56 Uhr

Ich verwende VS.NET 2003

19.01.2006 - 10:37 Uhr

Original von bintec
Also ich möchte mir auf jedenfall den Designer von Visual Studio oder sharp-develop nutzen um nicht wie in Java:

Label l1 = new JLabel("Text"); // ...

wie ein verruckter zu coden. Du hast geschrieben das es Probleme mit der GUI gibt, aber ich möchte ja keine Konsolenanwendung, sondern es soll unter der KDE/Gnome laufen. Als Datenbank nehme ich ja schon mysql da das auf beiden Plattformen läuft.

Ich habe jetzt verstanden das ich für Windows das .NET Framework 2.0 nutze und für Linux... so glaube ich das mono Framework 2.0. Was ich nicht verstehe, ich kompiliere unter Windows mein Projekt und es wird eine exe erzeugt. Aber wenn ich in den Kompilereinstellungen im sharp-develop 2.0 .NET mono2.0 auswähle was verändert sich dann und wie bringe ich es unter Linux ans laufen?

Ich möchte nicht die WINE nutzen.

Gruss bintec

Ja das kann ich gut verstehen. Entwickle ruhig unter Windows mit deiner Lieblings-IDE. Wenn du in SharpDeleop mono2.0 auswählst, dann verwenden #develop den Compiler von Mono. Dieser erzeugt genause wie der Compiler von Microsoft den Zwischencode, den dann Unter Linux und Windows ausgeführt werden kann.
glaube mir, du brauchst dir darüber keinen Kopf zu zerbrechen. Egal wie du unter Windows entwickelst (mit oder ohne mono, mit oder ohne #develop, mit oder ohne Visual Studio) es wird unter Linux laufen.

Ich rate dir aber, unter Windows mono zu verwenden, weil die Bibliotheken mehr unterstützen, als die von Microsoft mitgelieferten.
Wenn du zu 100% zu Linux kompatibel sein willst, solltest du GTK als GUI anstelle der Windows.Forms verwenden.
SharpDevelop bringt dafür designerunterstützung mit.

Schreibe mir doch bitte deine Erfahrungen mit .NET unter Linux

Liebe Grüße Christian

19.01.2006 - 10:06 Uhr

Hallo,

kann ich die Zeilennummer und die .cs-Datei den laufenden Programmes rausfinden?

Ich will sowas für Fehlermeldungen einsetzen.


 
 double teilen()
 {
 int zaehler = 2;
 int nenner = 0;

 if(nenner == 0) 
 {
    Console.WriteLine("Das geht so nicht" + zeilennummer + methodenname + codedatei);
 }
 else return (double) (zaehler / nenner);
 }

Danke im Voraus für die Hilfe

19.01.2006 - 09:54 Uhr

Ach das was die alle sagen ist alles Schmarn!

Ich entwickle zurzeit einen Server unter .NET der auch unter Linux laufen soll.
Das tolle ist, es geht einfach so!
Kompiliere das Programm ruhig unter Windows. Unter Linux gibt du dann das ein: mono meinProgramm.exe
Sogar die ganzen .dlls werden richtig verarbeitet.
Ich brauche für den Server keine GUI, denn das ist das einzige Problem bei Linux. Dafür gäbe es die Windows.Forms, die von Wine übernommen wurden.

P.S. Du musst kein SharpDevelop nehmen, Visual Studio machts auch.

18.01.2006 - 12:34 Uhr

Original von Xqgene
ich nehme fast ausschließlich Klassen. Aus einem ganz einfachen Grund: die kann man mit null initialisieren 😉

Der vorteil an strukturen ist der, dass alle Felder initialisiert werden müssen, bevor du die Instanz weiter verarbeiten kannst.
Machst du an einer Struct ein neues Feld hinzu, so wird den Kompiler an den stellen meckern, wo du diese Struktur instanziierst -> das ist gut.
Bei Klassen wird er nicht meckern, daher können bei Klassen die Felder uninitialisiert bleiben, was später zu Fehlern führt.

Ich finde strukturen an manchen stellen sehr praktisch.

17.01.2006 - 09:39 Uhr

Hallo,

ich müchte das intervall in Millisekunden von 1. Januar bis 1. Juli berechnen.


  DateTime start = DateTime.Parse("01.01.2006 12:00:00");
  DateTime ende = DateTime.Parse("01.07.2006 12:00:00");
  TimeSpan ts = ende.Substract(start);

  long milliseconds = ( (long) (ts.Ticks / 10000.0));

soweit so gut, aber was ist mit der Zeitumstellung?
der Wert in millisecods müsste doch um 1 Stunde abweichen. Oder hat .NET da eine Vorkehrung getrofften, das der Wert in milliseconds tatsächlich der richtige ist?

Danke im voraus

16.01.2006 - 15:44 Uhr

Berechne halt das Intervall, bis wann der Timer ausgelöst werden soll


 DateTime target = DateTime.Parse("7:00");
 TimeSpan intervall = target.Substract(DateTime.Now);
 Time meinTimer = new Timer();
 meinTimer.Interval = intervall * 10000.0;
 meinTimer.Start();

So kannst du dir sogar die mini Resourcen (von frisch vorgeschlagen) sparen. Der Timer löst genau 1x ein Elapsed-Ereignis aus. Das ist doch das, was du woltest.

10.01.2006 - 11:00 Uhr

Zu Frage 2:
Das Fenster wird erzeugt, weil cmd.exe das Fenster öffnet.
p.StartInfo.CreateNoWindow funktioniert auch hier. cmd.exe erzeugt unabhängig von dir das Fenster.

10.01.2006 - 09:16 Uhr

Hallo,
ich habe ein größeres Projekt, indem bereits mehrere Jahre Entwicklungsarbeit drinnen stecken. Wir haben uns damals für VB6 entschieden und jetzt wollen wir auf c# umsteigen.
Welche möglichkeiten gibt es, den bestehenden VB6-Code weiter zu verwenden? Oder den VB6-Code als unmanages Code in c# einzubinden?

Danke

P.S: Sorry ich hab wohl in das falsche Forum gepostet. Bitte verschiebt mich doch in das richtige Forum

09.01.2006 - 11:47 Uhr

Ich fürche wirklich verhindern kannst du nichts. Du kannst die inhalte Common-Assembly als Internal deklarieren (anstelle von Public) und das Projekt, das die Common-Assembly verwenden darf, in den gleichen Namespace legen.
Die Plugins, sofern sie in einem anderen Namespace sind, können dann die Common-Assembly nicht verwenden.

Wie du den IO einschränken könntest, fällt mir auch nicht ein. Vielleicht kannst du die Plugins als Unprivilegierter benutzer ausführen. Dann können sie selber kein IO machen, sondern müssen die anfragen an dein Programm, das privilegiert ist, weiterleiten.

Naja, ich denke mit den beiden sachen kannst du es hinwurschteln.

Ich hoffe es hat dir ein bischen geholfen