AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RPC Server nicht verfügbar

Ein Thema von msickel · begonnen am 30. Jul 2010 · letzter Beitrag vom 31. Jul 2010
Antwort Antwort
msickel

Registriert seit: 14. Mai 2005
108 Beiträge
 
Delphi 2005 Professional
 
#1

RPC Server nicht verfügbar

  Alt 30. Jul 2010, 08:52
Hallo,

Ich habe diesen Code gefunden (ich glaube sogar hier )
Er soll den Status der Netzwerkkarten auslesen.

Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Contnrs;

type

  TNetworkCard = class(TObject)
  private
    FKey: string;
    FStatus: Integer;
    FIPAddresses: TStrings;
    function GetStatusAsText:string;
  public
    constructor Create;
    destructor Destroy;override;
    property Key: string read FKey write FKey;
    property Status: Integer read FStatus write FStatus;
    property StatusAsText: string read GetStatusAsText;
    property IPAddresses: TStrings read FIPAddresses;
  end;

  TNetworkCards = class(TObject)
  private
    FItems: TObjectList;
    function GetItems(Index: Integer):TNetworkCard;
    function GetCount:Integer;
  public
    constructor Create;
    destructor Destroy;override;
    procedure Add(AItem: TNetworkCard);
    procedure Clear;
    procedure SetIPAddresses(const AKey: string;AAddresses: TStrings);
    property Items[Index: Integer]:TNetworkCard read GetItems;default;
    property Count: Integer read GetCount;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure GetNetworkStatus(ACards: TNetworkCards);
    procedure GetNetworkAddress(ACards: TNetworkCards);
  public
    FNetworkCards: TNetworkCards;
    FLocator: OleVariant;
    FRoot: OleVariant;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ActiveX, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var cnt: Integer;
begin
  Memo1.Clear;
  Memo2.Clear;
  Memo3.Clear;
  FNetworkCards.Clear;
  FLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FRoot := FLocator.ConnectServer('.', 'root\cimv2');
  try
    GetNetworkStatus(FNetworkCards);
    GetNetworkAddress(FNetworkCards);
    for cnt := 0 to FNetworkCards.Count - 1 do
      with FNetworkCards[cnt] do begin
        Memo1.Lines.Add(StatusAsText);
        Memo2.Lines.Add(IPAddresses.CommaText);
        Memo3.Lines.Add(Format('%s <-> %s <-> %s', [Key, StatusAsText, IPAddresses.CommaText]));
      end;
  finally
    FRoot := NULL;
    FLocator := NULL;
  end;
end;

procedure TForm1.GetNetworkAddress(ACards: TNetworkCards);
var
 instances: OleVariant;
 item: OleVariant;
 ipadd: OleVariant;
 enum: IEnumVariant;
 ret: Cardinal;
 tmp: TStringList;
 cnt: Integer;
begin
  tmp := TStringList.Create;
  instances := FRoot.InstancesOf('Win32_NetworkAdapterConfiguration');
  try
    enum := IEnumVariant(IUnknown(instances._NewEnum));
    while enum.Next(1, item, ret) = S_OK do begin
      ipadd := item.IPAddress;
      if VarIsArray(ipadd) then
        for cnt := VarArrayLowBound(ipadd,1) to VarArrayHighBound(ipadd,1) do
          tmp.Add(VarToStr(ipadd[cnt]));
      ACards.SetIPAddresses(VarToStr(item.Caption), tmp);
      item := NULL;
    end;
  finally
    enum := nil;
    instances := NULL;
    tmp.Free;
  end;
end;

procedure TForm1.GetNetworkStatus(ACards: TNetworkCards);
var
 instances: OleVariant;
 item: OleVariant;
 enum: IEnumVariant;
 ret: Cardinal;
 nIt: TNetworkCard;
begin
  instances := FRoot.InstancesOf('Win32_NetworkAdapter');
  try
    enum := IEnumVariant(IUnknown(instances._NewEnum));
    while enum.Next(1, item, ret) = S_OK do begin
      nIt := TNetworkCard.Create;
      nIt.Key := VarToStr(item.Caption);
      nIt.Status := StrToIntDef(VarToStr(item.NetConnectionStatus), -1);
      ACards.Add(nIt);
      item := NULL;
    end;
  finally
    enum := nil;
    instances := NULL;
  end;
end;

{ TNetworkCard }

constructor TNetworkCard.Create;
begin
  inherited Create;
  FIPAddresses := TStringList.Create;
end;

destructor TNetworkCard.Destroy;
begin
  FreeAndNil(FIPAddresses);
  inherited Destroy;
end;

function TNetworkCard.GetStatusAsText: string;
begin
  case FStatus of
    0: Result := 'Disconnected';
    1: Result := 'Connecting';
    2: Result := 'Connected';
    3: Result := 'Disconnecting';
    4: Result := 'Hardware not present';
    5: Result := 'Hardware disabled';
    6: Result := 'Hardware malfunction';
    7: Result := 'Media disconnected';
    8: Result := 'Authenticating';
    9: Result := 'Authentication succeeded';
    10: Result := 'Authentication failed';
  else
    Result := 'unknown'
  end;
end;

{ TNetworkCards }

constructor TNetworkCards.Create;
begin
  inherited Create;
  FItems := TObjectList.Create;
end;

destructor TNetworkCards.Destroy;
begin
  FreeAndNil(FItems);
  inherited Destroy;
end;

procedure TNetworkCards.Add(AItem: TNetworkCard);
begin
  FItems.Add(AItem);
end;

procedure TNetworkCards.Clear;
begin
  FItems.Clear;
end;

function TNetworkCards.GetCount: Integer;
begin
  Result := FItems.Count;
end;

function TNetworkCards.GetItems(Index: Integer): TNetworkCard;
begin
  Result := FItems[Index] as TNetworkCard;
end;

procedure TNetworkCards.SetIPAddresses(const AKey: string;AAddresses: TStrings);
var cnt: Integer;
begin
  for cnt := 0 to FItems.Count - 1 do
    if AnsiSameText(TNetworkCard(FItems[cnt]).FKey, AKey) then begin
      TNetworkCard(FItems[cnt]).IPAddresses.Assign(AAddresses);
      Break;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FNetworkCards := TNetworkCards.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FNetworkCards);
end;

end.
Compilieren funktioniert wunderbar, jedoch wenn ich das Programm dann ausführe erhalte ich immer den Fehler "Rpc Server nicht verfügbar".

Was mache ich falsch?

Betriebssystem Windows 7 32 und 64 bit

Was muss ich tun um den Code ans laufen zu bekommen?

Gruss Martin
ich weiss, das ich nichts weiss!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#2

AW: RPC Server nicht verfügbar

  Alt 30. Jul 2010, 09:17
ich hab da auch was gefunden ... ich glaube ebenfalls hier
Hier im Forum suchenRPC Server nicht verfügbar
und da die DP keine " mag, auch nochmal via Google
http://www.google.de/search?q=%22Rpc...lphipraxis.net

Das ist wohl kein Problem dieses Codes, sondern von Windows.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Jul 2010 um 09:20 Uhr)
  Mit Zitat antworten Zitat
msickel

Registriert seit: 14. Mai 2005
108 Beiträge
 
Delphi 2005 Professional
 
#3

AW: RPC Server nicht verfügbar

  Alt 30. Jul 2010, 10:11
kann man diese Windows Problem irgendwie in den Griff bekommen?
ich weiss, das ich nichts weiss!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

AW: RPC Server nicht verfügbar

  Alt 30. Jul 2010, 11:20
Ja, das Wie steht auch in ein/zwei dieser Threads drinnen.
z.B. müssen bestimmte Services laufen, welche oftmals deaktiviert sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
msickel

Registriert seit: 14. Mai 2005
108 Beiträge
 
Delphi 2005 Professional
 
#5

AW: RPC Server nicht verfügbar

  Alt 31. Jul 2010, 22:36
Habe den Fehler gefunden,

nach Änderung dieser Codezeile hat alles perfekt funktioniert.

FRoot := FLocator.ConnectServer('.', 'root\cimv2'); in

FRoot := FLocator.ConnectServer('localhost', 'root\cimv2');
ich weiss, das ich nichts weiss!

Geändert von msickel (31. Jul 2010 um 22:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz