Kategorien
Programmierung

Zugriffe auf „%windir%\System32“ und Unterverzeichnisse

Einer der Gründe, warum in der EDV zeitliche Voraussagen so schwer zu treffen sind, ist die Tatsache, daß man immer wieder über Dinge stolpert, mit denen man nicht gerechnet hat.

Beim Versuch, ein Aufräumskript für die Hinterlassenschaften des AMD-Treibers in Perl zu schreiben, wurde eine Datei nicht gefunden, die laut Explorer und Eingabeaufforderung aber sehr wohl vorhanden war:

C:\Windows\System32\drivers>dir ati2erec.dll
...
 Verzeichnis von C:\Windows\System32\drivers

21.11.2014  04:08            43.520 ati2erec.dll
               1 Datei(en),         43.520 Bytes

Die gleiche Aufgabenstellung als Perl-Skript

use strict;
use warnings;
if (-e 'C:\Windows\System32\drivers\ati2erec.dll') { print "found.\n"; }
else { print "not found.\n"; }

führte aber zur überraschenden Ausgabe

not found.

Wie so oft, wenn es um seltsame Dinge in Windows geht, handelt es sich hierbei aber um ein Feature und keinen Bug, wobei das Feature aber erst einmal gefunden werden muß. Im konkreten Fall hört es auf den Namen „File System Redirector“ und sorgt dafür, daß

In most cases, whenever a 32-bit application attempts to access %windir%\System32, the access is redirected to %windir%\SysWOW64.

Dies erklärt das obige Phänomen, da die verwendte Perl-Version eine 32-bit Anwendung ist. Freundlicherweise liefert der MSDN-Artikel auch gleich eine Lösung

32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access. This mechanism is flexible and easy to use, therefore, it is the recommended mechanism to bypass file system redirection.

so daß der Zugriff auf ‚C:\Windows\Sysnative\drivers\ati2erec.dll‘ dann tatsächlich ein

found.

als Ergebnis liefert. Das „flexible and easy to use“ möchte ich aber durchaus in Frage stellen, denn

Note that 64-bit applications cannot use the Sysnative alias as it is a virtual directory not a real one.

bedeutet letztendlich eine entsprechende Abfrage im Skript, damit – je nach verwendetem Interpreter – der Pfad entweder auf  „System32“ oder „Sysnative“ gesetzt wird.

Kategorien
Programmierung

No type library matching „Microsoft Outlook“ found

office64_typelibFunktioniert in der Kombination mit einer 32-bit Microsoft Office-2013-Version die Zeile

use Win32::OLE::Const 'Microsoft Outlook';

problemlos, so wird sie bei einem installierten 64-bit Office mit folgendem Fehler quittiert:

# No type library matching "Microsoft Outlook" found at ...
# Win32::OLE(0.1712): GetOleTypeLibObject() Not a Win32::OLE::TypeLib object at C:/Perl64/lib/Win32/OLE/Const.pm line 49

Eine längere Suche führte schließlich zum entscheidenen Hinweis: bei der 64-bit Installation wird der Schlüssel für die Typelib vom Office-Installer nur als „win64“ gesetzt, Perl aber sucht nach einem „win32“ Eintrag.

Ein Workaround ist somit recht einfach: unterhalb des Registrierungspfads

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\TypeLib

nach dem Eintrag für die „MSOUTL.OLB“ suchen und passend zum „win64“ Key händisch einen „win32“ Key mit gleichem Inhalt erzeugen.

Kategorien
Downloads

ppm-local

ppm-local is a Perl-script to create a local copy of the ActiveState Perl Package Manager repository.

License

ppm-local is published under the Perl Artistic License 2.0.

System requirements

Any machine running Perl 5.x

Included files

  • ppm-local.pl

Usage

Run ppm-local from the command line using at least the „action“ parameter. Syntax is

usage: ppm-local.pl --action=[load|reload] [parameters]

Mandatory parameters:

  • action=load
    Load ‚package.xml‘ if necessary and continue loading missing packages.
  • action=reload
    Load ‚package.xml‘ and continue loading missing packages.

Optional parameters:

  • repository=URL
    Use URL for download, default is ‚http://ppm4.activestate.com/MSWin32-x86/5.14/1405/‘
    You can get the URL used by your current ActivePerl installation from the „Edit“ / „Preferences“ – dialog of your Perl Package Manager
  • limit=n
    Download a maximum of n packages per run, default is 99999
  • runtime=n
    Run for a maximum of n minutes, default is 60
  • localdir=directory
    Directory containing local repository, default is ‚.‘

Run ppm-local without parameters to view a short man page including the default values.

Disclaimer

This software is provided as is without any guarantees or warranty.

Use at OWN risk!

Changelog

0.2a [2015-12-09]

  • added: error handling

0.2 [2013-06-23]

  • added: parameter ‚localdir‘
  • fixed: ppm-local missed a few packages

0.1 [2013-06-22]

  • initial release

Download

ppm-local (RAR-Archive, 2kb)

Kategorien
Betriebssysteme

Installation des vSphere SDK for Perl Package unter Debian

Debian gehört nicht zu den standardmäßig unterstützten Plattformen für den Betrieb des vSphere SDK for Perl. Damit es trotzdem läuft, sind ein paar kleine Anpassungen nötig:

Als erstes sollte die im Paket enthaltene und zur Installation verwendete Datei „vmware-install.pl“ modifiziert werden, welche im Zuge der Installation das verwendete Betriebssystem ermittelt und somit auch die zu verwendenden Systemwerkzeuge festlegt.

Nach einem

vi vmware-install.pl

reicht es, nach dem String „ubuntu“ zu suchen und dessen zweites Vorkommen durch „debian“ zu ersetzen.

Anschließend müssen noch die fehlenden Pakete

Archive::Zip 1.28 or newer
Crypt::SSLeay 0.55 or newer
Class::MethodMaker 2.10 or newer
HTML::Parser 3.60 or newer
Data::Dump 1.15 or newer
SOAP::Lite 0.710.08 or newer
URI 1.37 or newer
XML::SAX 0.16 or newer
XML::NamespaceSupport 1.09 or newer
XML::LibXML::Common 0.13 or newer
XML::LibXML 1.63 or newer
LWP 5.805 or newer
LWP::Protocol::https 5.805 or newer

nachinstalliert werden, damit die benötigten Abhängigkeiten erfüllt sind, was ein

apt-get install libssl-dev libarchive-zip-perl libcrypt-ssleay-perl libclass-methodmaker-perl libhtml-parser-perl libdata-dump-perl libsoap-lite-perl libxml-sax-perl libxml-libxml-perl libtime-duration-parse-perl

erledigt. Debian konform sollten die ausführbaren Dateien im letzten Schritt statt nach „/usr/bin“ in das Verzeichnis „/opt/bin“ kopiert werden.

Kategorien
Programmierung

Alle Jahre wieder

Allen Bloglesern ein entspanntes Weihnachtsfest und einen unfallfreien Rutsch in ein gesundes und glückliches 2014!

                                     +
                                     |
                                    / \
                                   ( i )
                                   /_ _\
                                  ( i i )
                                  /._ _.\
                                 ( i i i )
                                 /-._ _.-\
                                ( i i i i )
                                /'-._ _.-'\
                               ( i i i i i )
                                ^'-._ _.-'^ 
                                    |_| andi 2oo4

Anbei noch ein Tannebäumchen, das ich 2004 außer Konkurrenz in Perl für den Weihnachtsbaum-Wettbewerb von Thomas Walter erstellt habe.

Wer das entsprechende Skript habem möchte – bitteschön!

xmastree.rar (RAR-Archiv, 0.5kB)!