Autor Beitrag
delphianer
Hält's aus hier
Beiträge: 7


Delphi5, 7, 2007, XE
BeitragVerfasst: Sa 28.09.02 17:53 
Hi an alle,

ich habe folgendes Problem

Ablauf: :shock:
Server A (IP A) läuft FileMaker-Server-Dienst
Server B (IP B) überwacht Server A
Server A fällt aus
Server B bemerkt ausfall und startet eine Notfallprocedure
Server B ändert seine eigene IP (B) zu A um
Server B startet FileMaker-Server-Dienst

Alles klappt, bis auf die Änderung der IP-Adresse. Ich habe zwar schon eine Möglichkeit über Batch-Befehle diese zu ändern, aber dies ist mir nicht elegant genug. :?

Danke für die Hilfe.
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 28.09.02 19:49 
Hi,

ich habe mal in der Registrierung nach meiner IP gesucht und bin auf folgendem Schlüssel gestoßen:

HKLM\SYSTEM\ControlSet001\Services\{0BD83710-577E-4EFE-B571-B0D5EC0F5F58}\Parameters\Tcpip\IPAddress

Vielleicht hilft dir das. Ich werde mich nochmal einbisschen umschauen.

_________________
Viele Grüße
Jakob
delphianer Threadstarter
Hält's aus hier
Beiträge: 7


Delphi5, 7, 2007, XE
BeitragVerfasst: So 29.09.02 11:03 
Danke, DeCodeGuru,

diese Idee hatte ich auch schon leider ändert sich in diesem Pfad der Schlüssel von Rechner zu Rechner:
{0BD83710-577E-4EFE-B571-B0D5EC0F5F58}

Außerdem ist die IP in einem Mulitformat abgespeichert der von der Registry-Unit meines achtens nach noch nicht unterstützt wird.

Ab hier Änderung des Beitrages:

Da ich ja noch ein Steuerungstool zu den Diensten habe habe ich mich nun darangemacht und folgende Lösung erarbeitet, welche leider mit einer Bachtdatei arbeitet.

Mit Hilfe eines verstecktem Memofeldes (Property : Visible := False) erstelle ich eine Batch-Datei die auf c: hinterlegt wird.

Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
   Form1.hidememo.Lines.Clear;
   Form1.hidememo.Lines.Add('interface');
   Form1.hidememo.Lines.Add('ip');
   Form1.hidememo.Lines.Add('set adress "'+ Form1.interfacename.Text + '" static '+ Form1.IP.Text +' ' + Form1.Submask.Text);
   Form1.hidememo.Lines.SaveToFile('C:\SHP6FMChanger.shc');
   { interfacename = Verbindungsname (siehe Netzwerkumgebung/Eigenschaften (Expl.: LAN-Verbindung)
      IP = natürlich die IP-Adresse um die sich alles dreht
      Submask = ohne ihr gehts nicht}

Dies ist zwar noch nicht das gelbe vom Ei.

Nun führt der Dienst diese wie folgt im Fall der Fälle aus.
ausblenden Quelltext
1:
ShellExecute(Application.Handle, 'open',PChar('netsh'),PChar('-f C:\shp6fmChanger.shc'), nil, sw_ShowNormal);					

Falls jemand noch eine bessere Idee hat, immer her damit...


Zuletzt bearbeitet von delphianer am So 29.09.02 13:08, insgesamt 2-mal bearbeitet
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 29.09.02 11:26 
jo, das Problem ist mir kurz nach meinem Post auch erst aufgefallen. Zu deinem verstecktem Memo, würde ich dir mal eine Stringlist empfehlen. Damit kannst du genau das gleiche machen, wie im Memo und musst keine überflüssige Komponente erstellen. Außerdem hat das den vorteil, dass du eine Stringlist beliebig erstellen und löschen kannst (ok, ein Memo auch :wink: )

Dann hätte ich doch noch ne Frage und zwar: Kann man nicht das Prog netsh aus Delphi heraus mit den entsprechenden Parametern starten?

_________________
Viele Grüße
Jakob
delphianer Threadstarter
Hält's aus hier
Beiträge: 7


Delphi5, 7, 2007, XE
BeitragVerfasst: So 29.09.02 13:05 
Dann hätte ich doch noch ne Frage und zwar: Kann man nicht das Prog netsh aus Delphi heraus mit den entsprechenden Parametern starten?

Sorry hatte nen kleinen Fehler im Script, den habe ich abgeändert. Damit klärt sich dann auch, warum Du nicht gleich netsh- mit den entsprechnden Parametern starten könntest.

<interface>, <Ip> und Co. sind eigenständige netsh-Befehle die man nicht wie unter Linux miteinander koppeln kann.

Daher werden die Befehle in eine Datei geschrieben und dann wird netsh aufgefordert, diese Datei abzuarbeiten.
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 29.09.02 13:15 
achsou, jo, daas konnte ich aus deinen alten Code nicht herauslesen :wink:

ich habe aber mal ne Möglichkeit in einer Zeitschrift gefunden, wie man eine DosBox in einem Memo emulieren kann. Vielleicht finde ich den artikel noch, dann könnte man nämlich die Befehle der Reihe nach eingeben.

_________________
Viele Grüße
Jakob
delphianer Threadstarter
Hält's aus hier
Beiträge: 7


Delphi5, 7, 2007, XE
BeitragVerfasst: So 29.09.02 13:59 
Dos-Box-Emulator :shock:
Hört sich gut an...

Wenn Du ihn hast, schreib bescheid... :wink:
Plumperquatsch
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 29.09.02 21:18 
Hey Hallo,

ich bin sozusagen gerade an einem ähnlichen Problem. Ich klinke mein Notebook in verschiedenen Netzwerke ein (mehr als zwei) und will ein Prog entwickeln, mit dem man dies per Knopfklick machen kann.

Was den Schlüssel für die jeweilige IP Adressen in der Registry angeht, den kann man über den damit verbundenen Netwerkadapter herausfinden:
\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards

Da sind alle Netzwerkkarten eingetragen mit den dazugehörigen werten, die wiederum dem Schlüssel gleich sind...

Aber das mit dem Multiformat habe ich auch schon festgestellt.

Das mit der Batch-Datei ist vieleicht erstmal eine Lösung, wenngleich ich die noch nicht ganz verstehe. ..:oops:

Plumper..


Zuletzt bearbeitet von Plumperquatsch am Mo 30.09.02 00:01, insgesamt 2-mal bearbeitet
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 29.09.02 21:58 
also, ich habe meine Zeitschriften durchsucht und habe auch den Artikel gefunden. Allerdings musste ich bemerken, dass ich mich falsch erinnert hatte :oops: In dem Artikel geht es leider nur um die Umleitung von der Ausgabe eines Dos-Porgs in eine Memofeld. Nochmals sorry. Ich suche aber weiter nach ner Möglichkeit.

_________________
Viele Grüße
Jakob
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Mo 25.10.04 14:16 
Der letzte Beitrag ist schon zwei Jahre alt, aber irgendwie ist nirgends ein Fazit/ Endergebnis zu finden.
Die Ip ändere ich in der Registry und sie wird auch richtig angezeigt. Wenn ich neustarte ist die Ip in der Registry immer noch OK, aber wenn ich im TCP/IP Protokoll gucke ist die IP leer und mit -> cmd -> Ipconfig ist meine Lan-Karte nicht mehr vorhanden.
:nixweiss:
Mache ich da was falsch, oder sollte man die Ip doch besser auf ne andere Art ändern?

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Mi 27.10.04 11:06 
Mit Windows 2000 / XP funktioniert das ganze mit netsh, aber bei Win Nt4.0 muss ich das mit der registry machen.
Vielleicht mache ich ja einen Fehler in meinem Code, wäre toll wenn ihr mal drübergucken könntet.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Reg.RootKey:=HKEY_LOCAL_MACHINE;
  Reg.OpenKey
  ('SYSTEM\CurrentControlSet\Services\' + NetCardName +'\Parameters\TCPIP',true);
  
  setlength(Bufferar,length(Ex_IpAdd));
  For k:= 0 to length(Ex_IpAdd) Do
  Begin
    Bufferar[k-1]:=(ord(Ex_IpAdd[k]));
  end;

  Reg.WriteBinaryData('IpAddress',Bufferar[0],length(Bufferar));
  Reg.CloseKey;
  Reg.Free;
end;

NetCardName habe ich vorher auch aus der Registry ausgelesen, und da er auch den Wert IPAddress in der registry ändert ist das OK.
Wenn ich die Ip per Hand in der registry ändere ist es auch OK,
aber nicht mit dem Delphi zugriff. So ein großer Kack!!!!

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 27.10.04 19:42 
Naja, wenn ich das richtig gesehen hab kann man netsh mit ein wenig Arbeit auch ohne Skript-Schnittstelle nutzen.

Trick: Übergabe der Text- und Befehlsfolgen über den stdin und Auswerten der Ausgabe über stdout. Sollte sich mit CreateProcess ganz einfach realisieren lassen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Do 28.10.04 08:58 
Win NT4 kennt Netsh nicht und was du mit
Zitat:

Übergabe der Text- und Befehlsfolgen über den stdin und Auswerten der Ausgabe über stdout. Sollte sich mit CreateProcess ganz einfach realisieren lassen.

meinst :gruebel: .

Trotzdem Danke

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 28.10.04 22:25 
Das heißt soviel, dass du die Eingaben, die du in der Kommandozeile per Hand machst und die daraus resultierenden Ausgaben auch von deinem Programm aus manipulieren kannst, ohne dass der User eingreifen muss.

Dass heißt im Speziellen, dass du 3 Pipes anlegen musst (StdIn = Eingabe, StdOut = Ausgabe, StdErr = Fehlerausgabe).

Diese 3 Handles der Pipes kannst du dann der TStartupInfo-Struktur übergeben, die für einen Aufruf von CreateProcess benötigt werden.

Der Vorteil ist nun, dass du netsh nur einmal starten musst und gleich alle 3 Befehle trotzdem verarbeiten kannst.
Dazu musst du einfach nur die notwendigen Befehle (mit Zeilenumbruch!) in die StdIn-Pipe schreiben und die Ausgabe abwarten und dies führ jeden der 4 Befehle wiederholen. Der vierte Befehl ist der Befehl zum Verlassen des Scriptmodus (quit).

Danach nur noch das Prozess-Handle schließen und über das Resultat freuen.

Für ein Beispiel wie das mit dem Auslesen eines Programms einfach mal hier im Forum suchen oder dich, bei Misserfolg bei mir melden.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Fr 29.10.04 11:08 
Mein Problem ist nicht das netsh (das klappt wunderbar mit meinem Prog, wenns auf nem 2000/XP Rechner läuft), sondern das ändern der Ip unter WinNt4.0, dass diesen Befehl nicht kennt(Die meisten Anlagen-PCs werden von unserem Betrieb mit NT 4.0 ausgestattet).
Beim Rumpfuschen in der Registry habe ich das Problem, dass die Ip dann zwar in der Registry steht, die Ip jedoch nicht übernommen wird (Neustart wird gemacht).

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 18.11.04 20:26 
ein freund von mir, hat eine dynamische IP, und möchte eine feste IP haben,
welcher code ändert das denn um (muss ja bei jeder Internet-Verbindung neu gesettet werden)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 20.01.05 15:45 
Moin!

F34r0fTh3D4rk hat folgendes geschrieben:
ein freund von mir, hat eine dynamische IP, und möchte eine feste IP haben,
welcher code ändert das denn um (muss ja bei jeder Internet-Verbindung neu gesettet werden)

Was du (oder dein Freud) da vor hast, geht nicht. Du kannst nicht einfach die IP-Adresse, die dir dein Provider zugewiesen hat, ändern! :shock:

Wenn du eine feste IP haben willst, mußt du eine beantragen (bzw. z.B. bei der T-Kom bestellen). :roll:

cu
Narses