AGB  ·  Datenschutz  ·  Impressum  







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

Programm an fremden PC beenden

Ein Thema von Micha · begonnen am 7. Jul 2004 · letzter Beitrag vom 8. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#1

Programm an fremden PC beenden

  Alt 7. Jul 2004, 09:35
Ich habe ein Programm auf einem Laufwerk liegen.
Auf dieses Programm greifen mehrere User gleichzeitig über eine Verknüpfung (die am Desktop) liegt zu.

Wenn ich jetzt die exe-Datei durch eine neue Version ersetzen will, und es arbeiten gerade welche in dem Programm, kommt natürlich die Meldung, dass die exe nicht ersetzt werden kann.
Es gibt aber auch User, die haben die Anwendung immer laufen und ich kann somit die exe nie ersetzen.

Gibt es eine Möglichkeit, diese best. Anwendung an einem fremden PC zu beenden?

Da das Programm eh mit Datenbanken arbeitet, könnte man es so machen, dass das Programm meinetwegen jede Minuten nachschauen soll, ob in einer Tabelle meinetwegen eine 1 steht, dann beende das Programm, wenn 0 drin steht, dann einfach nichts machen.

Is natürlich nicht sehr schön diese Lösung da evtl. ungespeicherte Datensätze verloren gehen würden.

Weiß jemand eine andere Lösung?
  Mit Zitat antworten Zitat
Benutzerbild von BluesKid
BluesKid

Registriert seit: 2. Sep 2003
Ort: NRW
133 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 11:07
Moin moin

wir haben hier ne ähnliche Situation (gleichzeitiger zugriff auf exe usw.)...um die zu tauschen benennen wir immer die alte exe um (Programm_old.exe) und kopieren die neue exe ins Verzeichniss, so dass die Verknüpfungen auf die neue Version Zeigen (Programm.exe).

So haben dann alle Benutzer zumindest beim nächsten öffnen die neuste Version sprich manche dann erst am nächsten Tag weil sie eben bis Abends mit dem Programm arbeiten müssen...wird bei euch wirklich rund um die Uhr mit dem Programm gearbeitet ??


schönen Gruß

Sam
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 11:14
Entwickelt ihr die entsprechende exe selbst? Wenn ja, dann gibt es mehrere Möglichkeiten:
1. Ein Programm, das ihr auf alle Rechner kopiert, auf dem die Anwendung läuft. Dieses Programm gibt eine Meldung aus, dass das Prog in 1 Minuten oder 2 geschlossen wird, und der Benutzer so lange Zeit hat zu Speichern. Mit Adminrechten kannst du ja remote auch Prozesse ausführen. Sobald die 2 Minuten vorbei sind, kannst du beruhigt kopieren.

2. Ihr baut eine dynamische Updatefunktion ein, die mit einem Paket vom Netzwerk aus aktiviert wird. Sobald ein bestimmtes Datenpaket ankommt, wird das Programm beendet und die Bestätigung zurückgesendet.

Falls es nicht unbedingt mit Delphi gemacht werden soll, dann empfehle ich die Dameware NT Utilities, mit denen kann man Prozesse remote beenden. Dort läuft allerdings auch ein Client...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#4

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 11:54
@BluesKid: Manche lassen ihren Rechner Tag und Nacht laufen und dann eben auch immer gleich das Programm, dass sie es nicht immer öffnen müssen. Is halt so. *g*

Das mit dem Umbennen hat mich jetzt gerade schon ein bisschen verblüfft. Hab es nämlich auch so gemacht. Hätte aber eigentlich eine Meldung beim Umbennen erwartet, dass ich das nicht darf (weil's offen ist). - Aber es hat funktioniert.

Dann werde ich es wohl vorerst so machen.


@alcaeus:
jep, ist ein eigenes Programm mit Delphi
zu 1.: Ja, des wär so ne ähnliche Möglichkeit, wie ich auch schon (oben) gemeint hab.
zu 2.: sorry, versteh ich überhaupt net

Dameware habe ich. Aber um das Nutzen zu können brauche ich doch den PC-Namen oder? Den hab ich ja eigentlich nicht. Außer ich lasse ihn mir beim Starten des Programmes wegschreiben.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 11:58
Moin Micha,

schau Dir mal die APIs NetFileEnum und NetFileGetInfo an.
Damit könntest Du herausbekommen welcher User die Datei sperrt.
(und ggf. via NetSend darüber informieren, dass sie das Programm neu starten/beenden müssen)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#6

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 12:06
Hi.

Mal ne andere Idee, wobei ich nicht genau weiss, ob sowas in der Richtung schon mit der Updatefunktion gemeint war.

Wäre es nicht möglich, in der Anwednung einen UDP-Server einzubauen (Indy), der auf einem Port horcht? Und Du kannst dann per UDP-Client ein Broadcast ins Netz senden, mit einem bestimmten Befehl/Code, auf den der Server reagiert. Z.B. in dem er eine Meldung ausgibt, dass die Anwendung geschlossen wird bzw. die Anwendung sofort beendet, oder sowas?

Das wäre doch ne ganz feine Lösung, oder übersehe ich da etwas?

Gruß
Christian
Christian Rüsken
  Mit Zitat antworten Zitat
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#7

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 12:46
Zitat:
APIs NetFileEnum und NetFileGetInfo
Sorry, hab keine Ahnung wie ich da ran komm.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#8

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 12:51
Zitat von Micha:
Zitat:
APIs NetFileEnum und NetFileGetInfo
Sorry, hab keine Ahnung wie ich da ran komm.
Guckst Du MSDN-Library durchsuchenNetFileGetInfo
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Micha

Registriert seit: 21. Jul 2003
Ort: Neumarkt
263 Beiträge
 
#9

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 13:01
Habe ich mittlerweile auch gefunden, danke.

Aber ich weiß nicht, wie das Ding aufrufen kann.

Zitat:
NET_API_STATUS NetFileGetInfo(
LMSTR servername,
DWORD fileid,
DWORD level,
LPBYTE* bufptr
);
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Programm an fremden PC beenden

  Alt 7. Jul 2004, 13:52
Moin Micha,

mal ein kleines Beispiel für NetFileEnum, für dass Du noch ein Memo und einen Button brauchst.

Delphi-Quellcode:
const
  MAX_PREFERRED_LENGTH = DWORD(-1);
  NERR_Success = 0;

type
  PFILE_INFO_3 = ^FILE_INFO_3;
  FILE_INFO_3 =
    packed record
      fi3_id : DWord;
      fi3_permissions : DWord;
      fi3_num_locks : DWord;
      fi3_pathname : PWChar;
      fi3_username : PWChar;
    end;

  NET_API_STATUS = DWORD;

  function NetFileEnum(
    const servername : PWChar;
    const basepath : PWChar;
    const username : PWChar;
    const level : DWord;
    const bufptr : Pointer;
    const prefmaxlen : DWord;
    const entriesread : PDWord;
    const totalentries : PDWord;
    const resume_handle : PDWord
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';

  function NetApiBufferFree(
    const Buffer : Pointer
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var
  pfi3 : PFILE_INFO_3;
  pfi3Work : PFILE_INFO_3;
  dwRead : DWORD;
  dwTotal : DWORD;
  i : integer;
  dwResult : DWORD;

begin
  dwResult := NetFileEnum('\\<SERVERNAME>',nil,nil,3,@pfi3,MAX_PREFERRED_LENGTH,@dwRead,@dwTotal,nil);
  if dwResult = NERR_SUCCESS then begin
    try
      Memo1.Lines.Clear;
      pfi3Work := pfi3;
      for i := 1 to dwRead do begin
        Memo1.Lines.Add(pfi3Work.fi3_Username + ' - '+pfi3Work.fi3_pathname);
        inc(pfi3Work);
      end;
    finally
      NetApiBufferFree(pfi3);
    end;
  end else begin
    ShowMessage(SysErrorMessage(dwResult));
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:35 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