Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » RS232 ohne Adminrechte auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.05.2007, 07:14 Uhr
dozent



Hallo Leute!

Ich hätte da mal eine Frage. Ich habe ein Messprogramm für mein Arbeitsrechner (WIN2000) geschrieben, welches Daten vom COM-Port ausliest. Es geht alles wunderbar, aber nur mit Adminrechten. Die kriege ich aber nicht. Gibt es ne Möglichkeit, wie man das Problem umgehen könnte?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.05.2007, 07:21 Uhr
dozent



Ich programmiere mit Borland C++ Builder 6. Somit bin ich im falschen Forum, glaube ich. Bitte verschieben!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.05.2007, 09:46 Uhr
mmc20
puss in boots


hi, wie liest du denn von der COM ( bzw. wie öffnest du die ), normal sollte das schon funktionieren. zeig doch bitte den relevanten code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.05.2007, 12:11 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.05.2007, 13:16 Uhr
ao

(Operator)


Möglicherweise verlangst du zuviele Zugriffsrechte. Bei seriellen Ports gibts nur GENERIC_WRITE und GENERIC_READ - in deinem Fall könnte auch GENERIC_READ alleine reichen, wenn du nur aus dem Messgerät lesen willst. Guck mal, ob dir das hier schon weiterhilft:

http://msdn2.microsoft.com/en-us/library/aa363201.aspx

Da gibts ein Codeschnipsel, das zeigt, wie es mit Win32Api geht. Die Borland-Libs müssten da irgendwie drauf zurückgeführt sein.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.05.2007, 07:19 Uhr
dozent



Ich habe mittlerweile rausgefunden, dass mein Programm auf WinXp problemmlos läuft. Nur Win98, WinME und Win2000(mit eingeschränkten Rechten, da Arbeitsrechner) machen Probleme. Dabei ist Win98 und ME eher uninteressant. Hier ist mein Code:

Der Konstruktor:

C++:
fastcall THauptfenster::THauptfenster(TComponent* Owner)
        : TForm(Owner)
{
   PortOpen=false;
   SearchPorts(); // Hier hört der Spass schon auf

}



Die Open-Port-Methode

C++:
bool THauptfenster::OpenPort(char* port)
{
  try{
      comm=CreateFile(port,
                      GENERIC_READ|GENERIC_WRITE,
                      FILE_SHARE_DELETE,
                      NULL,
                      OPEN_EXISTING,
                      FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,
                      NULL
                      );
      }
  catch(...){return false;};
  if(GetLastError()) return false;

  PortOpen=true;
  return true;
}



Die Set-Methode

C++:
void THauptfenster::SetSerial()
{
// Geschwindigkeit etc. einstellen

  GetCommState(comm,&OriginalDCB); // Original einstellungen speichern
  MyDCB.DCBlength=sizeof(DCB);
  MyDCB.BaudRate=9600;
  MyDCB.ByteSize=8;
  MyDCB.Parity=NOPARITY;
  MyDCB.StopBits=ONESTOPBIT;
  SetCommState(comm,&MyDCB);// setzen der Daten
}




und jetzt die SearchPort()

C++:
void THauptfenster::SearchPorts()
{
    AnsiString alt;
    if (CBPort->Items->Count)alt=CBPort->Text;
    CBPort->Clear();// Liste leeren
    if (PortOpen) CloseSerial();

    // Vorhandene Ports suchen
    AnsiString Port="COM";

    for (int i=0;i<20;i++)
    {
        Port="COM"+IntToStr(i);
        if ( OpenPort(Port.c_str()) )
        {
            CBPort->Items->Add(Port);
            CloseSerial();
        }
    }

    if (CBPort->Items->Count)
    {
        int pos=CBPort->Items->IndexOf(alt);
        if (pos<0) pos=0;
        CBPort->ItemIndex=pos;
        ChangePort();
    }
    else
    {
    Fehler("Kein COM-Port gefunden!");
    Close();
  }
}



Liebe Kollegen, Ideen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.05.2007, 10:13 Uhr
ao

(Operator)


Die Argumente von CreateFile sind wahrscheinlich falsch. Vergleich das mal mit dem Microsoft-Schnipsel in meinem MSDN-Link oben, und probier es so wie die Herren und Meister es vorgeben.

Falls es das nicht ist, müsstest du mal genauer beschreiben, was eigentlich schiefgeht ("hört der Spass auf" ist etwas unpräzise) und an welcher Stelle. Soviel ich weiß, hat BCB6 einen Schrittdebugger, der Funktionen zeilenweise durchgehen kann.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.05.2007, 10:50 Uhr
mmc20
puss in boots


hi, du übergibst CreateFile(..) einige "unsinnige" parameter, da du nicht overlapped arbeitest, funktioniert folgender code

C++:
HANDLE    hComPort = CreateFile( "\\\\.\\COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.06.2007, 08:15 Uhr
dozent



Danke mmc20 für dein Tip. Ich werde es ausprobieren. Wie ich mittleirweile herausgefunden habe ist es reine Rechtefrage. Denn wenn ich auf meinem Arbeitsrechner als Admin eingeloggt bin, läuft alles anstandslos. Nur dieses Programm soll auf mehreren Rechnern laufen und da kann ich von unserem Admin nicht verlangen dass er jedem Adminrechte gewährt. Bei eingeschränkten Rechten findet mein Prog. keine Com-Ports. Kann das auch mit falschen Übergabeparametern zusammenhängen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.06.2007, 10:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


lass dir doch mal per FormatMessage den GetLastError vom CreateFile ausgeben?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: