Windows 7

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Windows 7

Beitrag von Jan »

Gestern informierte mich ein Kunde, daß mein Programm bei ihm nicht starten würde. Die Fehlermeldung kam unter Windows 7 64 Bit. Und zwar steigt das Programm bei einem PACK aus. Eine neue dll, in der genau dieser Befehl fehlt, läuft reibungslos.
Fehelrmeldung.jpg
Fehelrmeldung.jpg (23.06 KiB) 6119 mal betrachtet
Zeile 46 ist ein PACK. Es ist nur eine Datenbank geöffnet, exklusiv.

Soweit ich weiß, hat der Kunde das Programm in C:\Programme\... installiert. Kann das daran liegen? Prophylaktisch habe ich in meiner Installationsroutine den Standardpfad von da weggelegt. Aber was mache ich, wenn ein Kunde das manuell wieder dahin ändert?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2827
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 96 Mal
Danksagung erhalten: 13 Mal

Re: Windows 7

Beitrag von georg »

Hallo, Jan -


also, unter Windows 7 64bit kann ich mit einer auf FOXDBE und CDXDBE angepassten DBU ein PACK auf eine Datei ausführen, ohne dass es zu einem Absturz kommt.

Auch würde ich vermuten, dass der Pfad, wohin das Programm installiert wurde, keinen Einfluss haben sollte.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Martin Altmann »

Hallo Georg,
Hallo Jan,
Ich würde im Gegenteil behaupten, dass es sehr wohl einen Unterschied macht, wo das Programm hin installiert wurde!
Der User installiert (mit der Einstellung: als Administrator ausführen) in die Standardpfade von Windows 7.
Damit darf er dort schreiben (also Dateien erzeugen :!:)
Das installierte Programm startet er jedoch ganz normal per Doppelklick (also ohne die Einstellung: als Administrator ausführen). Somit darf in dem Verzeichnis keine Datei geschrieben werden - also auch keine Indexdatei angelegt!
Dies gilt so natürlich nur, wenn das Programm alle Dateien in seinem eigenen Ordner bzw. darunter liegenden Unterverzeichnissen erzeugen will!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Jan »

Hallo Martin,

prinzipiell stimme ich Dir zu. Gerade das ist ja das Problem, das seit Vista herrscht: In das C:\Programme darf ich nur mit Admin-Rechten schreiben, aber dann habe ich im Installationsverzeichnis keine Schreibrechte mehr.

Hier scheint die Problematik aber irgendwie ein wenig anders zu liegen. Bei einem PACK steigt das Programm mit besagter Fehlermeldung aus. Ein folgendes OrdCreate() funktioniert aber (ich habe dem Kunden eine dll ohne PACK geschickt, die läuft tadellos).

Aber zu dem Problem mit den Admin-Rechten: Wenn die Installation mit Admin-Rechten läuft, kann man dann nicht im Anschluß an die Installation, aber noch im Laufe des Installationsablaufes über eine Funktion mit den dann noch bestehenden Admin-Rechten die Rechte des Verzeichnisses auf 777 setzen? Mal so Unixmäßig ausgedrückt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Martin Altmann »

Hallo Jan,
sollte man können (das mit den Rechten).
Thema Pack <-> OrdCreate()
Bei OrdCreate() wird ein bereits vorhandener Inde aufgefrischt (bzw. neu angelegt). Gab es die Indexdatei schon :arrow: kein Problem mit Schreibrechten (wird ja nix erzeugt, sondern geändert):!:
Bei Pack wird eine temporäre Datei erzeugt, dort kommen alle nicht gelöschten rein, die alte wird entfernt, die temporäre umbenannt :arrow: Datei muss erzeugt werden :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Jan »

Hallo Martin,

OrdCreate() erzeugt bei mir einen neuen Index, da ich auf Grund früherer schlechter Erfahrungen nie ein Reindex mache. Erst alte Datei physikalisch löschen, dann den Index neu erstellen.

Aber warte mal: Das könnte das Problem sein. Ich lösche die alte Indexdatei mit FErase(). Ohne den Rückgabewert abzufragen (wozu auch, ich will ja löschen). Ohne Schreibrechte wird natürlich die Datei garnicht gelöscht! Und ich mache doch nur ein Reindex. Hmm. Interessant. So schnell kann man bei Windows reinfallen. Welcher Blödmann hat sich eigentlich das mit den UACs für C:\Programme\ ausgedacht? Können wir die Standrechtliche Erschießung nicht wieder einführen? :evil:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Windows 7

Beitrag von AUGE_OHR »

hi,

wir reden doch von "temporären" Dateien ?!

bekannt ist ja TEMP als Umgebungsvariable, aber es gibt für Cl*pper und Xbase++ auch noch TMP
Cl*pper

Bei bestimmten Vorgängen, wie Sortieren und Indizieren, erstellt
CA-Clipper temporäre Dateien. Diese Dateien werden entweder im aktuellen
Verzeichnis oder in dem mit der Umgebungsvariablen TMP angegebenen
Verzeichnis abgelegt.

Hinweis: Bei früheren CA-Clipper-Versionen wurden temporäre Dateien
in das aktuelle DOS-Verzeichnis oder, sofern angegeben, in das
Verzeichnis abgelegt, das über SET DEFAULT angegeben war.

Xbase++

TMP=<Verzeichnis>
Im TMP Verzeichnis werden temporäre Dateien angelegt, z.B. wenn INDEX ON oder DbSort()
ausgeführt wird.
Ok PACK macht ja "mehr" ... aber DBF Dateien haben ja auch nichts unter C:\Programme zu suchen ... die sind doch auf dem Server ... ;)

... und wenn man keinen Server hat würde ich die
a.) in eine "eigenes" Verzeichniss legen
b.) "D:\irgendwas", also nicht auf die "C:" Festplatte legen.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Jan »

Moin Jimmy,

sorry, aber hast Du heute schon zu viel Sekt intus? :lol:

MS hast uns jahrelang eingebleut, daß Programme gefälligst in C:\Programme\ reininstalliert werden sollen. Also macht der User das auch so. Aber macht er das unter Vista oder 7, dann wird er mit merkwürdigen Rechtevergaben bestraft.

Wir reden natürlich NICHT über temporäre Dateien, erst Recht nicht in irgendwelchen Temp- oder sonstwie-Verzeichnissen, und auch nicht über nichtexistierende Server im Privatkunden-Bereich.

Ich selber habe mich übrigens niemals freiwillig dieser bescheuerten C:\Programme-Vorgabe gebeugt. Aber der Standard-Privatkunde erwartet das leider. Ich habe inzwischen in meiner Installations-Routine von C:\Programme\ weggebaut. Aber was mache ich, wenn der User das da wieder hinstellt (da ich dem User die Möglichkeit lasse, ein ihm gefälliges Verzeichnis zu wählen)?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Windows 7

Beitrag von peternmb »

Jan hat geschrieben:Aber was mache ich, wenn der User das da wieder hinstellt (da ich dem User die Möglichkeit lasse, ein ihm gefälliges Verzeichnis zu wählen)?Jan
Nachdem ich mich damit auch längere Zeit auseinander gesetzt habe, sah ich es als einzigen praktikablen Ausweg, das alles über die Installationsroutine abzufangen. Da ich dafür Inno-Setup benutze läßt sich das relativ leicht machen.

Es wird beim Setup das Betriebssystem ermittelt, und

1.) bei einer Installation unter XP liegen alle Dateien (in entsprechenden Unterordnern) im Verzeichnis \Programme (so wie es zumindest bei mir bisher üblich war)

2.) bei einer Installation unter Vista/Windows 7 gibt es verschiedene Varianten (Vorgabe ist die übliche Standard-Installation in \Programme)
a) der User bestätigt die Standardinstallation: dann wird im Ordner \ProgramData ein Verzeichnis angelegt, wohin die Daten kommen
b) der User wählt ein eigenes Verzeichnis im Ordner \Programme: dann wird im Ordner \ProgramData ein Verzeichnis mit diesem Namen angelegt, wohin die Daten kommen
c) der User wählt ein eigenes Verzeichnis nicht in \Programme: Installation erfolgt wie unter XP (alles in diesem Verzeichnis, Daten in Unterordnern). Wenn mein Programm im Netztwerk-Betrieb eingesetzt werden soll empehle ich auf alle Fälle diese Vorgehensweise.

Bisher nutze ich das so seit etwa einem jahr absolut ohne Probleme. Admin-Berechtigung ist nur für das Setup notwenig bzw. für Updates.
Wenn gewünscht stelle ich gerne die dafür notwendigen Inno-Setup-Codeschnipsel bereit.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Windows 7

Beitrag von Martin Altmann »

Hallo Peter,
stelle ruhig die Schnipsel bereit - da gibt es hier bestimmt einige, die dankbar wären :D

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Windows 7

Beitrag von peternmb »

Hier das Code-Beispiel für Inno-Setup:

Code: Alles auswählen

; -- MeinTest.iss --
; copying all needed files and creating an icon.

[Setup]
PrivilegesRequired=admin
OutputBaseFilename=MeinTest_SETUP
VersionInfoVersion=1.00.11
VersionInfoCompany=PB-IT
LicenseFile=C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\license.txt
AppName=Test 1.00.11
AppVerName=Test 1.00.11
AppCopyright=Copyright © 2010 Ich
WizardImageFile=compiler:WizModernImage-IS.bmp
WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
DefaultDirName={pf}\MeinTest
DefaultGroupName=MeinTest
UninstallDisplayIcon={app}\MeinTest

[Languages]
Name: "de"; MessagesFile: "compiler:Languages\German.isl"

[Dirs]
Name: {commonappdata}\{code:Pfad}; Permissions: everyone-full

[Files]
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\Test.exe"; DestDir: "{app}"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\Test.exe.manifest"; DestDir: "{app}"
Source: "C:\Programme\alaska_19\runtime\DBFDBE.dll"; DestDir: "{app}"
Source: "C:\Programme\alaska_19\runtime\NTXDBE.dll"; DestDir: "{app}"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\file1.dbf"; DestDir: "{code:GetTargetDir}\Daten"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\file2.dbf"; DestDir: "{code:GetTargetDir}\Daten"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\ttipp.xpf"; DestDir: "{code:GetTargetDir}"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\Test\Hilfe.chm"; DestDir: "{code:GetTargetDir}"
Source: "C:\Dokumente und Einstellungen\Ich\Eigene Dateien\Setups\MSCOMCTL.OCX"; DestDir: "{sys}"; Flags: onlyifdoesntexist uninsneveruninstall sharedfile regserver

[Run]
Filename: "{app}\Test.EXE"; Description: "Test-Programm starten";Flags: postinstall nowait skipifsilent

[Code]
Function GetTargetDir (Param: String): String;
var
  os: TWindowsVersion;  // <-- "os" deklarieren
begin
//  MsgBox(ExpandConstant('{commonappdata}') , mbInformation, MB_OK);
GetWindowsVersionEx(os);
// hier der Code, der ermittelt, wo installiert werden soll
if (os.Major > 5) and (ExpandConstant('{pf}') = ExtractFileDir(ExpandConstant('{app}'))) then
   begin
      Result := ExpandConstant('{commonappdata}')+'\'+ExtractFileName(ExpandConstant('{app}'))
   end
else
   Result:= ExpandConstant('{app}')
end;

function Pfad(StrTmp: String): String;
begin
  StrTmp := WizardDirValue;
  //MsgBox(StrTmp,mBInformation,MB_OK);
  StrTmp := ExtractFileName(StrTmp);
  //MsgBox(StrTmp,mBInformation,MB_OK);
  Result := StrTmp;
end;
bei Aktivierung der MsgBoxen die ich zu Testzwecken drinhatte, kann man die Auswertung der Pfadangaben gut verfolgen.
Wichtig ist auch der Eintrag in der DIRs-Sektion, da man sonst im Verzichnis ProgramData wiedersinnigerweise keine Schreibrechte besitzt.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Windows 7

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben:Wir reden natürlich NICHT über temporäre Dateien, erst Recht nicht in irgendwelchen Temp- oder sonstwie-Verzeichnissen
ich habe es nochmals getestet und bin erschrocken.

User : Testi als "normaler" User, Verzeichniss vorher durch Admin angelegt ... nix weiter "freigegeben".
Icon liegt als Verknüfung auf dem Desktop

1.) ohne TMP PACK-> Error
2.) mit TMP PACK-> funktionert !!! (DBFNTX)
3.) mit TMP PACK/COPY TO BBB ... er stürzt nicht ab !!!
ein DIR C:\Program Files\0\*.DBF zeigt mir nur AAA.DBF aber nicht die BBB.DBF ... hm ... also "suchen"

c:\Users\Testi\AppData\Local\Virtualstore\Program Files\0\*.DBF zeigt mir AAA.DBF und(!!!) BBB.DBF :-k

p.s. Win7100 Ultimate RC/latest Patch / Xbase++ v1.9.355 (Patch ohne visual Style)
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Windows 7

Beitrag von peternmb »

AUGE_OHR hat geschrieben:c:\Users\Testi\AppData\Local\Virtualstore\Program Files\0\*.DBF zeigt mir AAA.DBF und(!!!) BBB.DBF :-k
Der Virtualstore-Ordner wird soweit ich weiß automatisch angelegt, wenn etwas im \Programme-Ordner ohne Admin-Berechtigung geschrieben werden soll. Ich hatte diese Probleme erstmals bei der Erstellung von Index-Dateien. Die waren im VirtualStore-Ordner, und wurden dort natürlich vom Programm nicht gefunden. Wenn mehrere Benutzer mit dem Programm arbeiten wird es noch lustiger, denn dann hat jeder seinen eigenen VirtualStore-Ordner :banghead:

Das Problem ist anscheinend, dass die Dateien an unterscheidlichen Orten gespeichert werden, je nach Admin-Status und Benutzerkonten-Steuerung. Ich habe es nicht geschafft, diese Probleme von meinem Programm aus zu lösen. Deshalb die Festlegung der Speicherorte für die Daten über das Installations-Setup.
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Windows 7

Beitrag von Markus Walter »

Hallo Jimmy,

willkommen in der "modernen" Windowswelt ab Vista...

... und den guten Ideen, die die Leute in Redmond haben. Stichwort "Virtualstore", such mal danach und lese genüsslich und Du wirst am Verstand zweifeln (nicht an Deinem, sondern an dem der MS-Programmierer...)
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Antworten