Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vista und Comandlineparamerübergabe, "..ist ja 'n Ding!" (https://www.delphipraxis.net/106059-vista-und-comandlineparameruebergabe-ist-ja-n-ding.html)

turboPASCAL 4. Jan 2008 14:35


Vista und Comandlineparamerübergabe, "..ist ja 'n Ding!
 
Vista und Comandlineparamerübergabe, "..ist ja 'n Ding!"

@mods:
Tja, ich weis jetzt nich so recht wohin mit dem Thema, ist sowol API als auch BS.



Also, ich wusel gerade ein wenig mit Vista rum und bemerke das einige ältere Programme für XP
probleme mit Parametern haben. Kann ja nun nicht sein dachte ich mir und habe eine kleines Programm
geschrieben welches als Loader dient. Nun siehe da es klappt. Ich frage mich nur woran das liegt?

Delphi-Quellcode:
program ResEd;

{$R '_res\resources.res' '_res\resources.rc'}
{.$DEFINE DEBUG}

uses
  Windows,
  ShellAPI;

const
  OrginalExecFile = 'ResEd!.exe';

function LastDelimiter(S: String; Delimiter: Char): Integer;
var
  i: Integer;
begin
  Result := -1;
  i := Length(S);
  if (S = '') or (i = 0) then
    Exit;
  while S[i] <> Delimiter do
  begin
    if i < 0 then
      break;
    dec(i);
  end;
  Result := i;
end;

function ExtractFilePath(sFilename: String): String;
begin
  if LastDelimiter(sFilename, '\') = -1 then
    Exit;
  Result := Copy(sFilename, 1, LastDelimiter(sFilename, '\'));
end;

{function GetVirtualPathName(path: string): string;
var
  FileInfo: TSHFileInfo;
begin
  SHGetFileInfo( PAnsiChar(path), 0,
    FileInfo, SizeOf(TSHFIleInfo), SHGFI_DISPLAYNAME);

  result := FileInfo.szDisplayName;
end;}

function WinMain(hInstance: HINST; hPrevInstance: HINST;
  lpCmdLine: PChar; nCmdShow: Integer): Integer; stdcall;
var
  Err    : Cardinal;
  s      : String[128];
  params : string;
  i      : integer;
begin
  params := '';
  s := '';

  if ParamCount > 0 then
  begin
    for i := 1 to ParamCount do
    begin
      params := params + #32 + ParamStr(i);
    end;

    if params[1] = #32 then Delete(params, 1, 1);
  end;


  Err := ShellExecute(GetDesktopWindow, 'open', PCHAR(OrginalExecFile), PCHAR(Params),
    PCHAR(ExtractFilePath(ParamStr(0))), nCmdShow);
  if Err <= 32 then
  begin
    case err of
      0                        : s:= 'The operating system is out of memory or resources.';
      ERROR_FILE_NOT_FOUND  : s:= 'The specified file was not found.';
      ERROR_PATH_NOT_FOUND  : s:= 'The specified path was not found.';
      // ... *schnipp*
    end;

    MessageBox(0, PChar('Error:'#10#13#10#13'CmdLine: '+ Paramstr(0) + #10#13+
      params+#10#13#10#13+s), '!Launcer', MB_ICONERROR or MB_OK);
  end;

  Result := 0;
end;

BEGIN
  WinMain(hInstance, System.hPrevInst, System.CmdLine, System.CmdShow);
 
  {$IFDEF DEBUG}
    MessageBox(GetDesktopWindow, System.CmdLine,
      '!Launcer: CmdLine:', MB_ICONINFORMATION or MB_OK);
  {$ENDIF DEBUG}
END.
Kann so etwas an Unicode liegen ?

Bernhard Geyer 4. Jan 2008 14:43

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Hast du die User-Gängelung UAC (User Account Control) aktiv und übergibst Dateien die unter C:\Programme oder C:\Windows liegen? Dann könnte die Virtualisierung des Dateisystems zuschlagen.

turboPASCAL 4. Jan 2008 16:30

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Das dürfte egal sein da der bzw. die übergebenen Datei.- und Pfadnamen den realen entsprechen.

Bernhard Geyer 4. Jan 2008 16:32

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Schalte doch mal Testhalber UAC ab und probier es dann. Unter Vista würde ich nichts als egal ansehen. Dazu sind noch zu viele Macken/Fehler vorhanden.

Dezipaitor 4. Jan 2008 17:03

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Was genau haben denn diese Programme für ein Problem?

turboPASCAL 4. Jan 2008 17:20

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Teilweise schmieren die einfach ab. Mit dem Launcher klappts ohne (fasst immer) Probleme.
Nur die Delphi32.exe sagt sie könne die Datei XYZ nicht finden. Die Delphi32.exe ohne den
Launcher gestartet gibt folgenden Fehler aus:

Zitat:

Zugriffsverletzung bei Adresse 00881890 in Modul 'coreide60.bpl' ...

turboPASCAL 11. Feb 2009 07:03

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Moin, ich wollte mal nachfragen ob der ein oder andere auch soche Dinge beobachten konnte.

nuclearping 11. Feb 2009 07:24

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Startest du Delphi im Admin Modus? Wenn nicht, könnte das daran liegen.

grizzly 11. Feb 2009 08:20

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Mein Delphi 7 schmiert auch ab, wenn ich es mit einer Projektdatei als Parameter starten will. Lustigerweise erinnert es sich aber an den Namen, wenn ich es anschließend nochmal regulär starte und dann das Projekt über den Laden-Dialog öffnen will: Es steht dann schon in der Liste der zuletzt geöffneten Projekte...
Wenigstens gibt es sich Mühe...;)

Gruß
Michael

turboPASCAL 11. Feb 2009 08:38

Re: Vista und Comandlineparamerübergabe, "..ist ja 'n D
 
Naja, es geht nicht nur um Delphi, meines läuft ja bis auf den kleinen Fehler.
Generell haben manche ältere Programme dieses Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Seite 1 von 2  1 2      

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