Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm läuft nicht auf anderen Computern (https://www.delphipraxis.net/65638-programm-laeuft-nicht-auf-anderen-computern.html)

robinWie 19. Mär 2006 12:28


Programm läuft nicht auf anderen Computern
 
Hallo,
ich habe für ein Programm ein Setup geschrieben. Wenn ich das Programm auf meinem Computer installiere läuft alles wie es sein sollte. Aber wenn ich das auf anderen Computern installiere, wird das Programm gestartet aber sofot wieder beendet. Wie kann das sein? Alle für das Programm relevanten Dateien werden mit geliefert.
Für das Setup verwende ich das Programm.

Danke im Voraus

MrKnogge 19. Mär 2006 13:08

Re: Programm läuft nicht auf anderen Computern
 
kopieren die Dateien doch mal ohne Setup auf den anderen Computer und probier ob es dann geht.

gruss

robinWie 19. Mär 2006 13:29

Re: Programm läuft nicht auf anderen Computern
 
Ok habe ich ausprobiert funktioniert aber immer noch nicht.
Da kommt noch nichtmal eine Fehlermeldung. Es baut sich auf und plotzlich ist es weg. :cry:

marabu 19. Mär 2006 13:34

Re: Programm läuft nicht auf anderen Computern
 
Zitat:

Zitat von robinWie
Alle für das Programm relevanten Dateien werden mit geliefert.

Offensichtlich doch nicht alle. Was macht dein Programm so? Welche System-Komponenten werden verwendet? Welche Units werden eingebunden, die nicht zum Delphi-Standard gehören?

Grüße vom marabu

robinWie 19. Mär 2006 14:04

Re: Programm läuft nicht auf anderen Computern
 
Außer einigen Dateien, die zum speichern der Einstellungen benötigt werden, hat das Programm nicht mehr viele weiteren Programmdateien. Nur 2 DLLs, 3 Bitmaps und 3 "client" Programmen. Die sind aber alle vorhanden
Ich habe auch mal ausprobiert ob ich funktionen aus einer Dll ins Programm übertrage aber das hatte keinen Effekt.

Nachtrag:
Zitat:

Was macht dein Programm so?
Es ist ein sehr umfangreiches Programm um Musik zu hören. Eher eine art Media Center

Prototypjack 19. Mär 2006 15:07

Re: Programm läuft nicht auf anderen Computern
 
Hallo,
Hört sich ja merkwürdig an, dein Problem.
Kann es sein das du auf irgendwelche Fremdroutinen zugreifst die auf den anderen Rechnern schlicht nicht vorhanden sind?
Ich kann mir schlecht vorstellen das du das nicht machst, da eine Standalone Mediacenteranwendung ziemlich schwer zu realisieren sein dürfte.
Gruß

robinWie 19. Mär 2006 15:27

Re: Programm läuft nicht auf anderen Computern
 
Zitat:

Hallo,
Hört sich ja merkwürdig an, dein Problem.
Kann es sein das du auf irgendwelche Fremdroutinen zugreifst die auf den anderen Rechnern schlicht nicht vorhanden sind?
Ich kann mir schlecht vorstellen das du das nicht machst, da eine Standalone Mediacenteranwendung ziemlich schwer zu realisieren sein dürfte.
Gruß
Ich verwende eine Komponente die in Delphi nicht enthalten ist. Es kann sein das die auf Fremdroutinen zugreift. Meines wissens nach sind, die Routinen für die Komonente, aber in der Bass.dll die sich im Programmordner befindet. Dann verwende ich noch zwei Routinen aus einer "Drive.dll" die ist aber auch im Programmordner. Sonst wüsste ich keine anderen Routinen auf die das Programm zugreift, aber ich schaue mal nach.

Nachtrag:
Ich habe gesucht und keinen Fehler gefunden. Wohlmöglich liegt es an der "Drive.dll" die ich mir mal zusammengetragen habe. Es kann ja sein dass diese ein Fehler enthält. Ihr könnt sie euch ja mal anschauen

Delphi-Quellcode:
library Drive;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, MMSystem;

{$R *.res}

function LockDrive(ADriveLetter: Char; ALock: Boolean): Boolean;
var LWStatus: Hwnd;
    LTemp: Cardinal;
    LPMR32: Boolean;
Const IOCTL_STORAGE_MEDIA_REMOVAL = $2D4804;
begin
  LwStatus := CreateFile(PChar('\\.\' + ADriveLetter + ':'),GENERIC_READ Or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  LPMR32 := ALock;
  If LwStatus <> INVALID_HANDLE_VALUE Then
  begin
    result := DeviceIoControl(LwStatus, IOCTL_STORAGE_MEDIA_REMOVAL, @LPMR32, sizeof(LPMR32), nil, 0, LTemp, nil);
    CloseHandle(LwStatus);
  end else result := False;
end;

function DriveName(DriveChar: Char): string;
var
  OldErrorMode     : Integer;
  NotUsed, VolFlags : DWORD;
  Buf              : array [0..MAX_PATH] of Char;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    GetVolumeInformation(PChar(DriveChar + ':\'), Buf,
                         sizeof(Buf), nil, NotUsed, VolFlags,
                         nil, 0);
    Result := Format('%s', [Buf]);
  finally
    SetErrorMode(OldErrorMode);
  end;
end;

function GetDiskIn(Drive: Char): Boolean;
var
  ErrorMode: word;
  DriveNumber: Integer;
begin
  {Meldung eines kritischen Systemfehlers vehindern}
  ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
  try
    DriveNumber := Ord(Drive) - 64;
    if DiskSize(DriveNumber) = -1 then
      Result := False
    else
      Result := True;
  finally
    {ErrorMode auf den alten Wert setzen}
    SetErrorMode(ErrorMode);
  end;
end;


function OpenCD(Drive: String): Boolean;
var
  Res: MciError;
  OpenParm: TMCI_Open_Parms;
  Flags: DWORD;
  S: string;
  DeviceID: Word;
begin
  Result := False;
  S := Drive + ':';
  Flags := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
  with OpenParm do
  begin
    dwCallback := 0;
    lpstrDeviceType := 'CDAudio';
    lpstrElementName := PChar(S);
  end;
  Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
  if Res <> 0 then Exit;
  DeviceID := OpenParm.wDeviceID;
  try
    Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
    if Res = 0 then Exit;
    Result := True;
  finally
    mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
  end;
end;

function CloseCD(Drive: String): Boolean;
var
  Res: MciError;
  OpenParm: TMCI_Open_Parms;
  Flags: DWORD;
  S: string;
  DeviceID: Word;
begin
  Result := False;
  S := Drive + ':';
  Flags := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT;
  with OpenParm do
  begin
    dwCallback := 0;
    lpstrDeviceType := 'CDAudio';
    lpstrElementName := PChar(S);
  end;
  Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
//  if Res <> then Exit;
  DeviceID := OpenParm.wDeviceID;
  try
    Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
    if Res = 0 then Exit;
    Result := True;
  finally
    mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
  end;
end;

exports
  LockDrive name 'LockDrive',
  DriveName name 'DriveName',
  GetDiskIn name 'GetDiskIn',
  CloseCD  name 'CloseCD',
  OpenCD   name 'OpenCD';
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 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