AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Standort Comand Line Compiler (DCC32.exe) ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Standort Comand Line Compiler (DCC32.exe) ermitteln

Ein Thema von Harry Stahl · begonnen am 5. Mär 2016 · letzter Beitrag vom 6. Mär 2016
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 18:00
Wenn ich das Programm im Admin-Modus ausführe, dann wird der Pfad gelesen.

Warum ist das jetzt für diese einfache Ausleseaktion erforderlich?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#12

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 18:08
Schau dir die Berechtigungen des Registry-Zweigs an, dann weißt du, ob's daran liegt.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 18:21
Bei Zugriffen auf HKEY_Local_Machine muss man anscheindend nach diesem Thread hier, den Wow6432Node selber ergänzen, damit es funktioniert.

Habe ich nun mal so gemacht, funktioniert trotzdem nicht:
Delphi-Quellcode:
function RegReadStr(RegPath, RegValue:string; var Str: string;const RootKey :HKEY): Boolean;
var
  Reg: TRegistry;
begin
  try
    Reg := TRegistry.Create;
    try
      Reg.RootKey := RootKey;

      if IsWindows64 then begin
        RegPath := ReplaceStr (RegPath, 'SOFTWARE\', 'SOFTWARE\Wow6432Node\', false);
      end;

      Result := Reg.OpenKey(RegPath, false);
      if Result then Str:=Reg.ReadString(RegValue);
    finally
      Reg.Free;
    end;
  except
    Result := False;
  end;
end;
Openkey liefert schon false zurück
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 18:28
OK, des Rätsels Lösung: Die Laufzeit-Themes waren aktiviert, wenn ich die ausschalte, funktioniert es mit und ohne meine Ergänzung.

War mir nicht klar, dass die Standard-Laufzeit-Themes (hier gerade unter XE7) so eine Auswirkung haben (normalerweise habe ich immer meine eigene Manifest-Datei, aber bei diesem Projekt noch nicht).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 19:44
Vermutlich gibt das Manifest eine andere Windowsversion als die Version an bis zu der die Anwendung kompatibel ist.
Dadurch wird wohl aus Kompatibilitätsgründen etwas umgeleitet.

Hast du mal statt OpenKey OpenKeyReadOnly ausprobiert?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 20:32
Das D5-Setup ist 32 Bit, drum steht das auch in WOW32.
Liest man das mit einem 32 Bit Programm aus dem "normalen" Pfad, dann wird man dahin umgeleitet.

Man kann beim Zugriff auf die Registry aber auch angeben, ob man diese Umleitung deaktiviert haben möchte.


Steht das BIN-Verteichnis des zuletzt installierten Delphi nicht vorne in PATH?
Dann kann man einfach nur "dcc32.exe" aufrufen und landet immer beim Letzten.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#17

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 5. Mär 2016, 22:23
Entweder TRegistry.Create(KEY_READ) benutzen oder TRegistry.OpenKeyReadOnly , um lediglich lesend auf den Zweig zuzugreifen. TRegistry.Open öffnet standardmäßig schreibend, was ohne Adminrechte nunmal nicht geht.

Eine Ersetzung/Benutzung von 'Wow6432Node' ist eine ganz schlechte Idee, denn einerseits braucht man das ausschließlich dann, wenn ein 64 Bit Programm auf den 32 Bit Zweig zugreifen will und andererseits rät MS davon ab, den String hartkodiert zu benutzen. Stattdessen gibt es Flags, die man beim Öffnen eines Schlüssel - bei Delphi im Konstruktur TRegistry.Create - benutzen kann: KEY_WOW64_64KEY und KEY_WOW64_32KEY.

Will sagen: Es gibt überhaupt keinen Grund, das Manifest rauszunehmen.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 6. Mär 2016, 01:08
Und die beiden Keys nutze ich wie, in welcher Konstellation?

Also angenommen, ich habe ein 32-Bit-Programm.

Nutze ich dann einen der beiden Schlüssel?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 6. Mär 2016, 01:23
Jedenfalls, funktioniert es jetzt soweit ohne Manifest, werde morgen mal ein aktuelles einbinden und dann mal sehen.

Hinweis @ Jaenicke: In Deinem Programm wurde Delphi 5 nicht gefunden, weil der Eintrag nicht unter current_user zu finden war, sondern unter local_machine.

Dein Programm müsste man also so erweitern, dass es den Pfad auch unter diesen Bedingungen findet:

Delphi-Quellcode:
function TCompileProcess.GetDelphiRootPath(const ADelphiVersion: string): string;
var
  Reg: TRegistry;
begin
  Result := '';
  if FRegistryPath = 'then
    FRegistryPath := GetRegistryPath(ADelphiVersion, True);
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKeyReadOnly(FRegistryPath) then
    begin
      Result := ExtractFilePath(Reg.ReadString('App'));
      Reg.CloseKey();
    end;

    if Result = 'then // neu hier
    begin
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      if Reg.OpenKeyReadOnly(FRegistryPath) then
      begin
        Result := ExtractFilePath(Reg.ReadString('App'));
        Reg.CloseKey();
      end;
    end;

  finally
    Reg.Free();
  end;
end;
Übrigens compiliert das Programm bei Deiner Lösung nicht, weil es offensichtlich eine Reihe von Pfadangaben auflöst. Allerdings stimmen davon einige nicht mehr und dann bricht der Compiler ab.

Ich verwende daher nur den reinen Compileraufruf, seltsamerweise compiliert er, obwohl 2 Units in anderen Verzeichnissen stehen (die könnte der Compiler aber auflösen, aus den Angaben der Projektdatei (dpr)).

Dank Deines Beispiels habe ich gesehen, wie man den output des Compilers (das in Deinem Programm ja in ein Konsolenfenster geht) abfangen kann. Habe ich bei mir so gelöst, dass ich das in meinem Programm in ein Memo ausgebe.

Der Output erscheint mir aber etwas seltsam (siehe anliegenden Screenschot unten).
Miniaturansicht angehängter Grafiken
editor2.jpg  

Geändert von Harry Stahl ( 6. Mär 2016 um 01:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Standort Comand Line Compiler (DCC32.exe) ermitteln

  Alt 6. Mär 2016, 07:34
Die Ausgabe des Compilers ist völlig in Ordnung. Wenn du die Ausgabe haben möchtest, die du in der Delphi IDE siehst, dann musst du MSBuild benutzen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:21 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