Wie kommt man Excel-Version und Makrosicherheitsstufe
-
29-09-2019 - |
Frage
Microsoft hat unsere langjährige vor kurzem gebrochen (und offiziell von ihnen empfohlen) Code, um die Version von Excel und seiner aktuellen omacro Sicherheitsstufe zu lesen.
Was zur Arbeit verwendet:
// Get the program associated with workbooks, e.g. "C:\Program Files\...\Excel.exe"
SHELLAPI.FindExecutable( 'OurWorkbook.xls', ...)
// Get the version of the .exe (from it's Properties...)
WINDOWS.GetFileVersionInfo()
// Use the version number to access the registry to determine the security level
// '...\software\microsoft\Office\' + VersionNumber + '.0\Excel\Security'
(ich war immer amüsiert, dass die Sicherheitsstufe für Jahre in einem unsicheren Registrierungseintrag ist ...)
In Office 2010, .xls-Dateien werden nun mit „„Microsoft Application Virtualization DDE Launcher“oder sftdde.exe verbunden. Die Versionsnummer dieser exe ist offensichtlich nicht die Version von Excel.
Meine Frage:
Anders als Excel tatsächlich startet und Abfrage es für Version und Sicherheit Ebene (mit OLE CreateOleObject ( 'Excel.Application')), gibt es eine saubere, schneller, oder zuverlässige Art und Weise, dies zu tun, die mit allen Versionen ab Excel 2003 funktionieren würden?
Lösung
Mit
function GetExcelPath: string;
begin
result := '';
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe', false) then
result := ReadString('Path') + 'excel.exe';
finally
Free;
end;
end;
die vollständigen Dateinamen der excel.exe-Datei zu erhalten. Dann GetFileVersionInfo
wie gewohnt verwenden.
Soweit ich weiß, ist dieser Ansatz funktioniert immer.
Andere Tipps
mit OLE CreateOleObject ( 'Excel.Application'))
Sie können Excel-Versionen unter Verwendung des gleichen Registry-Orts erhalten installiert, dass diese Funktion verwendet.
Grundsätzlich Sie einen großen Teil dieser Funktion Registrierungscode klonen müssen.
Sie können auch auf diesem Funktionsaufruf auszuzuspionieren durch Tools wie Microsoft Process Monitor
genau zu sehen, wie funktioniert Windows sucht installiert Excel -. Und dann ist es genau die gleiche Art und Weise zu tun,
Sie müssen offene Registrierung auf HKEY_CLASSES_ROOT\
und listen alle die Zweige, deren Name beginnt mit „Excel.Application.“
Zum Beispiel an diesem meinem Arbeitsplatz ich nur habe Excel 2013 installiert, und das entspricht HKEY_CLASSES_ROOT \ Excel.Application.15
Aber auf meinem anderen Arbeitsplatz habe ich Excel 2003 und Excel 2010 installiert ist, Testen verschiedener XLSX-Implementierungen in diesen beiden, so dass ich zwei Registrierungsschlüssel haben.
HKEY_CLASSES_ROOT \ Excel.Application.12 HKEY_CLASSES_ROOT \ Excel.Application.14
So, müssen Sie mit diesem Namen alle diese Zweige aufzählen, Dot und Nummer.
Hinweis: der Schlüssel HKEY_CLASSES_ROOT \ Excel.Application \ CurVer würde Namen „default“ Excel, aber was bedeutet „Verschulden“ ist nicht eindeutig, wenn mehrere Zeichnet installiert sind. Sie können von diesem Standardwert übernehmen, wenn Sie sich nicht, oder Sie können auf Ihre eigene Idee entscheiden, was zu wählen, wie wenn Sie die maximale Excel-Version oder Minimum oder etwas wollen.
Dann, wenn für jeden spezifischen Excel-Zweig sollten Sie die Standardschlüssel lesen seinen CLSID Unterzweiges.
Wie HKEY_CLASSES_ROOT\Excel.Application.15\CLSID
hat nil genannten Schlüssel gleich
{00024500-0000-0000-C000-000000000046}
-. holt diesen Index zu String-Variable
Dann wird eine zweite Suche tun - gehen in einen Zweig wie HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer
genannt (verwenden Sie den abgerufenen Index)
Wenn dieser Zweig existiert - holt den Null-Namen „Standardschlüssel“ Wert etwas wie C:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation
zu bekommen
Das letzte Ergebnis ist die Kommandozeile. Es beginnt mit einem Dateinamen (in diesem Beispiel nicht zitiert, kann aber in Anführungszeichen sein) und wird durch optionale Befehlszeile gefolgt. Sie haben keine Befehlszeile benötigen, so dass Sie anfänglichen commanlind extrahieren müssen, notiert oder nicht.
Dann müssen Sie prüfen, ob eine solche exe-Datei vorhanden ist. Ist dies der Fall - man kann es starten, wenn nicht -. Die Registrierung für andere Excel-Versionen überprüfen