Seite 1 von 1

Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:12
von Jan
Eine merkwürdige Sache: Ich habe diese Zeile in mehreren Programmen drin, um den Benutzern Infos darüber zu geben, wie alt die verwendete Programmversion ist:

Code: Alles auswählen

oDlgApp:setTitle(AppName(.F.) + " vom " + DToC(FileDate(AppName())) + " - " + FileTime(AppName())
Unter Windows 7 sieht das so aus:
Windows 7.jpg
Windows 7.jpg (5.7 KiB) 9165 mal betrachtet
Unter unter Server 2012R2 so:
Server 2012R2.jpg
Server 2012R2.jpg (3.55 KiB) 9165 mal betrachtet
Das ist die gleiche exe. Aber Datum und Uhrzeit werden auf dem Server verschluckt. Hat da jemand eine Idee zu?

Jan

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:18
von Manfred
hast Du das mal in eine Var geschrieben und geschaut was da drin steht? Auf den ersten Bliock sehen mir die .. aus, als wenn der Anzeigebereich zu klein wäre in diesem FAll.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:24
von Jan
Hallo Manfred,

kann nicht sein. Vom Datum erscheinen ja die Punkte, und auch der Bindestrich zur Uhrzeit.

Jan

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:25
von Manfred
deshalb meine Frage mit der Var....

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:34
von Tom
Was gibt File(AppName()) zurück?

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 14:52
von brandelh
AppName( .f. ) geht nur, wenn die EXE im aktuellen Verzeichnis liegt, das kann sich aber ändern !
Oder auf Virtuellen PCs ganz anders aussehen, was passiert bei AppName( .t. )

Wobei ich mich wundere, dass du die Werte nicht direkt in der EXE ablegst ...
Der Compiler ersetzt diese Konstanten mit der zugehörigen Information, d.h. der Wert der Konstanten ändert sich beim kompilieren mehrerer Quellcode-Dateien.

__FILE__ Eine Zeichenkette mit dem Namen der kompilierten Datei.
__FILEPATH__ Eine Zeichenkette mit dem Namen und der Pfadangabe der kompilierten Datei.
__LINE__ Ein numerischer Wert, der die Zeilennummer der Datei angibt, in der die Konstante verwendet wird.
__DATE__ Eine Zeichenkette, die das Datum enthält, an dem die Datei kompiliert wurde. Das Format ist "YYYYMMDD", wobei YYYY für das Jahr, MM den Monat und DD den Tag steht. Dieser Wert kann mittels Stod() in eine Variable des Types Datum umgewandelt werden.

__TIME__ Eine Zeichenkette im Format "HH:MM:SS". Sie gibt die Systemzeit an, bei der eine Datei kompiliert wurde.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 15:07
von Tom
AppName() geht mit beiden Parametervarianten immer.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 15:08
von Tom
Ach so. Können FileDate() und FileTime(), die ja beide aus den Tools stammen, möglicherweise nicht mit UNC-Pfaden umgehen?

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 15:24
von brandelh
habe ich falsch geschrieben, ich meinte, dass die Funktionen die das auswerten OHNE Pfad auf ein richtig eingestelltes aktuelles Laufwerk vertrauen.
Ich habe festgestellt, dass dies nicht immer der Fall ist und es kann verstellt werden.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 15:48
von Tom
Aber Jan macht's ja mit Pfad. :wink:

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Mi, 09. Sep 2015 17:31
von brandelh
TOM hat geschrieben:Aber Jan macht's ja mit Pfad. :wink:
Jan hat geschrieben:

Code: Alles auswählen

oDlgApp:setTitle(AppName(.F.) + " vom " + DToC(FileDate(AppName())) + " - " + FileTime(AppName())
Handbuch hat geschrieben: AppName( [<lFullQualifiedName>] ) --> cExeFileName

Parameter

<lFullQualifiedName>

Der Standardwert für <lFullQualifiedName> ist .F. (falsch). Wird er auf .T. (wahr) gesetzt, gibt die Funktion den Namen der EXE Datei einschließlich Laufwerk und Pfad zurück.

Rückgabe
ich denke nicht ;-)

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 10. Sep 2015 11:11
von Herbert
Du bekommst keine Datum/Zeitinfo zurück. Warum weiss ich nicht.
Was wäre, wenn jemand das Programm kopiert und dabei einen neuen Datum/Zeitstempel setzt? Selbst dann würde es nicht stimmen.
Deshalb empfehle ich dir, ausschliesslich mit einer Versionsnummer zu arbeiten, welche dir dann den Zeitpunkt des Erstellens verrädt.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 10. Sep 2015 11:17
von Tom
Hubert hat recht. AppName() defaultet ohne Parameter auf .F., gibt also den Namen der Anwendung ohne Pfad zurück. Jan muss dort AppName(.T.) verwenden, also für FileDate() und FileTime().

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 10. Sep 2015 11:22
von Tom
Ich binde Produkt- und Versionsinformationen als Ressource ein, wobei beides bei jedem Build automatisch gesetzt wird (es gibt Templates für die ARC-Dateien, die von einem Parser verarbeitet werden). Diese Informationen stehen innerhalb der Anwendung zur Verfügung, aber man kann sie auch - über die Eigenschaften der EXE und der DLLs - von außen sehen. Erstellungsdatum und -uhrzeit können sich möglicherweise ändern, etwa, wenn man die EXE zippt und wieder auspackt (je nach ZIP-Tool).

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 10. Sep 2015 11:24
von brandelh
Ich würde Datum und Zeit einbrennen in die EXE, FileTime() und FileDate() wurden geschrieben als es nur eine Zeit für beide gab.
Nun gibt es aber 3 davon und die sind nicht immer leicht zu verstehen, außerdem könnten die Zugriffe auch auf Rechteprobleme stoßen,
auf einem WebServer darf ich z.B. nicht vom "berechneten" Stammverzeichnis aus gehen, sondern muss immer ".\" nutzen, bei eigenen Servern ist das vielleicht anders,
aber mit der automatisch (oder Manuell) eingebrannten Werten ist man auf der sicheren Seite.

MS konform wäre natürlich die Angabe als Resource.

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 10. Sep 2015 11:37
von brandelh
hier mal als Beispiel meine Umsetzung:

in ANW_ALLG.CH

Code: Alles auswählen

#define chProgrammVersion  "0.00-000"
#define chFileVersion      "0"
#define chProgrammFreigabe "00.00.2012"
in ANW_ALLG.ARC

Code: Alles auswählen

#include  "ANW_ALLG.CH"
...
LANGUAGE = "de"

VERSION

   "CompanyName"      = "..."
   "LegalCopyright"   = "Copyright © ..."
   "ProductName"      = "..."
   "ProductVersion"   = chProgrammVersion
   "FileDescription"  = "..."
   "FileVersion"      = chFileVersion
   "OriginalFilename" = "....EXE"
im Hauptprogramm habe ich dann die Werte in Variablen nochmals gespeichert, da dies einfacher ist. Resourcen Abfrage geht natürlich auch ;-)

Code: Alles auswählen

   // Anwendungsfenster erzeugen (application window)
   oDlg       := HBRootDialog():new( ,, aPos, aSize,, .F. )

   oDlg:title               := HB_PROG_NAME
   oDlg:ProgName            := HB_PROG_NAME
   oDlg:ProgVersion         := chProgrammVersion
   oDlg:ProgVersionMitDatum := HB_PROG_VERSION_MIT_DATUM
   oDlg:ProgFreiDatum       := chProgrammFreigabe
   oDlg:aProgOwner          := HB_PROG_OWNER
   oDlg:aProgUser           := HB_PROG_USER
   oDlg:aLizenzText         := HB_PROG_LIZENZ_TEXT

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 17. Mär 2016 13:32
von UliTs
Jan, was hat sich hieraus ergeben?

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 17. Mär 2016 14:44
von Jan
Hallo Uli,

das scheint daher gekommen zu sein, das die Programme unter einem anderen Benutzernamen mit anderen Rechten auf dem Server gestartet wurden. Aber warum das so war - keine Ahnung.

Jan

Re: Datum und Uhrzeit unter Server 2012R2

Verfasst: Do, 17. Mär 2016 17:23
von satmax
Tom hat geschrieben:Ich binde Produkt- und Versionsinformationen als Ressource ein, wobei beides bei jedem Build automatisch gesetzt wird (es gibt Templates für die ARC-Dateien, die von einem Parser verarbeitet werden). Diese Informationen stehen innerhalb der Anwendung zur Verfügung, aber man kann sie auch - über die Eigenschaften der EXE und der DLLs - von außen sehen. Erstellungsdatum und -uhrzeit können sich möglicherweise ändern, etwa, wenn man die EXE zippt und wieder auspackt (je nach ZIP-Tool).
Das ist eindeutig die bevorzugte und auch meine Variante, damit sieht man auch über die Eigenschaften die Programmversion (wenn sich das Programm mal nicht mehr starten lässt).