AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CSDIL_PROGRAM_FILES in 32Bit/64Bit
Thema durchsuchen
Ansicht
Themen-Optionen

CSDIL_PROGRAM_FILES in 32Bit/64Bit

Ein Thema von QuickAndDirty · begonnen am 7. Sep 2012 · letzter Beitrag vom 22. Sep 2012
Antwort Antwort
Seite 2 von 3     12 3      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#11

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 11:56
Ich will nicht IN einen Specialfolder installieren.

Ich will verhindern das jemand einen Ordner angibt der ein Specialfolder ist. Insbesondere die WOW64 File System Redirection macht das recht schwer.

Ich habe jetzt folgende Lösung aus dem Guide den du Verlinkts hast zusammen gestrickt.


Delphi-Quellcode:
Function CheckForProgramFilesPath(aPath:String):Boolean;
var Ppath:String;
    i:integer;
  const PathVariable:Array[0..5] of string=(
                                            '%ProgramFiles%',
                                            '%ProgramFiles(x86)%',
                                            '%ProgramW6432%',
                                            '%CommonProgramFiles%',
                                            '%CommonProgramW6432%',
                                            '%CommonProgramFiles(x86)%'
                                           );

  function ExpandEnvStr(const szInput: string): string;
  var szBuf:String;
      r : Cardinal;
  begin
    result := '';
    try
      r := ExpandEnvironmentStrings(pChar(szInput), nil, 0);
      if r > 0 then
      Begin
        SetLength(szBuf, r);
        ExpandEnvironmentStrings(pChar(szInput), PChar(szBuf), r);
        result := PChar(szBuf);
      End;
    except
      Result := '';
    end;
  end;
{
  Function UnExpandEnvPath(const szPath: string):String;
  var szBuf:String;
      cchBuf:Cardinal;
  Begin
    setLength(szBuf, MAX_PATH);
    cchBuf := MAX_PATH;
    if PathUnExpandEnvStrings( Pchar(szPath),@szBuf[1],cchBuf) then
      Result := Pchar(szBuf)
    else
      Result := szPath;
  End;
}

  Function TestPath(ReferencePath,aTestPath:String):Boolean;
  Begin
    Result := (ReferencePath <> '') and
              (length(atestPath) > length(ReferencePath)) and
              (Ansipos(ReferencePath,aTestPath) = 1);
  End;

Begin
  result := false;
  aPath := ExpandUNCFileName(aPath);
  for I := 0 to 5 do
  Begin
    PPath := ExpandEnvStr(PathVariable[i]);
    if TestPath(PPath,aPath) then
    begin
      Result := true;
      exit;
    end;
  End;
End;
Nur weiß ich nicht ob das funktioniert.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 8. Sep 2012 um 11:59 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#12

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 12:03
Warum nicht ParamStr(0) oder ist es nicht das eigene Programm?
Ich will eine Installation in den Programme Ordner verhindern.
Das Problem ist zu prüfen ob der angegebene Pfad der Programme Pfad ist.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 14:04
Ich will eine Installation in den Programme Ordner verhindern.
Bist Du Dir sicher, dass das der richtige Weg ist? Immerhin ist das ja der vorgesehene Installationsordner.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#14

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 14:20
@DeddyH
Für manche Anwendungsfälle mag man den Nachteil den diese Ordner mit sich bringen vermeiden wollen. (Ich weiß dass das nicht Microsoftkonform ist, aber wenn man schaut wie es Microsoft mit den seinen Programmen bzgl. dieses Punktes bisweilen hält, relativiert sich das)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 14:23
Das will ich gar nicht bestreiten, aber das sind dann doch eher Ausnahmefälle. Wenn ein Programm Probleme bekommt, weil es in diesem Ordner installiert wurde, liegt der Verdacht nahe, dass man etwas falsch gemacht hat (Schreiben ins Programmverzeichnis ist da immer ein Kandidat).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 14:43
Genau das wollte er ja auch mit der Aussage nahe bringen, dass das Programm dafür noch nicht vorbereitet ist.

Allerdings würde ich versuchen bei der Installation dem Programmverzeichnis die entsprechenden Schreibrechte mitzugeben. Das Loch wird dadurch auch nicht größer als es für die Funktionsweise des Programms benötigt wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

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

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 15:19
Nur weiß ich nicht ob das funktioniert.
Das funktioniert im Prinzip und ist dabei eine der beiden einzigen Möglichkeiten (die ich kenne), von einem 32 Bit Programm an den Pfad "%SystemDrive%\Program Files" eines 64 Bit OS zu kommen. Die andere Möglichkeit wäre das Auslesen von [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion], Wert ProgramFilesDir aus der Registry mit dem Flag KEY_WOW64_64KEY für die Funktion OpenKey(). Ein ähnliches Problem hatte ich in diesem Thread vor einem halben Jahr geschildert und mit der Verwendung beider Methoden auch gelöst.

Im Grund schließe ich mich aber den Vorschreibern an, dass es besser wäre, die Installation zuzulassen und die Zugriffsrechte entsprechend zu setzen.

MfG Dalai
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#18

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 11. Sep 2012, 14:53
Ich glaube das Problem ist das ich in diesem Ordner keine Freigaben machen kann.
irgendwas war zumindest da, was macht das unser Programm so wie es jetzt ist nicht im Programme Ordner funktioniert,
obwohl NetShareAdd + Access_All
und SetFileSecurityRecursive + Userid #1#1#0#0#0#0#0#1#0#0#0#0 + DACL mit Vollzugriff
usw. gesetzt wird.

Um das Windows konform zu machen müssen wir noch ne menge Arbeit reinstecken...und da das keine Features sind die der Kunde würdigt ist das für Kunden Quasi leerlauf....entwicklungsstillstand...


Besonderen Dank euch, Dalai, Hathor, DanielProgramming, für die Info.
@All: ich weiß es ist nicht der beste weg, aber ich muss mir meine Zeit einteilen. So ist das Problem schon mal vom Tisch des Support, die keine Installationen mehr in Ordnung bringen müssen, Ich kann denen nicht sagen sie sollen mal eben 3-6 Monate mit dem Problem leben bis ich die beste aller Lösungen umgesetzt habe.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (11. Sep 2012 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 11. Sep 2012, 21:07
Nur mal dem ganzen Verzeichnisstringvergleichen einhalt zu gebieten...

Dein Programm hat also Probleme, wenn es in einem Verzeichnis installiert ist, wo es keine Schreibrechte besitzt, weil es immernoch in seinem eigenem Programmverzeichnis rumschreibt?

Dann wäre es besser, wenn du prüfst, ob es Schreibrechte besitzt und nicht einfach nur wahllos mit irgendwelchen Verzeichnisnamen vergleichst.
Oder du machst es wie alle Programme und prüfst garnichst, sondern vertraust darauf, daß der Benutzer es ordentlich installiert. (und erwähnst es wenigstens spätestens im Setup)
Oder du reparierst dein Programm, so daß es endlich ordnungsgemäß arbeitet. (was man eigentlisch schon seit mindestens Win200 hätte machen sollen)

Tipp:
- Es gibt noch mehr Verzeichnisse, wo man nicht schreiben darf.
- Der Benutzer kann die Rechte ändern, wie er lustig ist.
- Ist dir bekannt, daß man das selbe Verteichnis unterschiedlich ansprechen kann? (lange Namen, kurze 8.3-Name, UNC-Pfade, Hardlinks, Softlinks, Verzeichnis/Partition mehrfach gemountet, ...)
- ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#20

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 12. Sep 2012, 10:47
Tipp: Schreib ganz oben in deine EULA, die beim Setup angezeigt wird:
"Nicht ins Programme-Verzeichnis installieren, da es sonst zu Fehlfunktionen führen kann!". Damit ist das Problem vorerst umgangen. (Bis auf DA-User, die es trotzdem falsch installieren)

Danach überarbeitest du das Programm, dass es ins Benutzerverzeichnis bzw. ins Allusers-Verzeichnis schreibt. Es gibt genug dazu hier im Forum.
Delphi programming

Geändert von WM_CLOSE (12. Sep 2012 um 10:51 Uhr)
  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 03:22 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