Author Archive for Fabio Di Lorenzo

Page 2 of 4

SVS/SWV: Non Virtual Application may perform very slow while at least 1 virtual layer is active

Symptom

A software package which is non virtual may perform very slow.

Solution / Workaround

Even non-virtual application are being redirected through the SVS/SWV Filesystem Minidriver while at least 1 virtual layer is active on the system.

This may significantly slow down applications with many registry/file system I/O operations. (e.g bad performance at startup)

To work around this issue you can add those application to the SVS Program Ignore list which you may find at the following location:

HKLM\System\Altiris\ProgramIgnoreList (REG_MULTI_SZ)

However bear in mind that those applications will no longer see any virtualized resources.

How to repackage a NDIS driver

Several months ago I met a new challenge in shape of a device driver I’ve never seen before called…

NDIS – Network Driver Interface Specification.

I dont want to loose much time with talking about the “driver type” itself, because you can get all information from a well written wikipedia article.

Such a driver usually consists of the very typical driver files:

Inf File, Cat File & Sys File. Everything signed as you might expect of course.

My first attempt was to install the driver the “Ontrex Best Practices” way which usually means either to use the difxapp merge module or the dpinst.exe executable (custom action).

Unfortunately, none of them led to to same result as the original package had behave.

After googling around a bit I finally came to the tipping point: netcfg.exe

This executable is present on every windows at least since windows 2000 and basically helps you to automate any “Network Card” related installation tasks like

- Installing/servicing/uninstalling Network Protocols (e.g. Internet Protocol Version 4 (TCP/IPv4)

- Installing/servicing/uninstalling Network services (e.g. QoS Packet Scheduler)

- Installing/servicing/uninstalling Network Clients (e.g. Client for Microsoft Networks)

Kindly asked the program offers me the following command line parameters:

So the last missing information in the puzzle is how do I know the component id for my driver?

Solution was simple: I had installed the original package and searched through the registry  using the INF Filename and this offered me the following result:

 

Now I had all required information to schedule a custom action in my package to install the driver.

Because netcfg.exe is already on every windows installation I used the type “Execute Program From Destination” (MSI SDK: Custom Action Type 34)

[System64Folder]netcfg.exe -l “[#netlwf.inf]” -c s -i BNNS_NdisLwf

In our case the target operating system  was a x64 OS and therefore we needed to specify the [System64Folder].

Because the action changes the system state it logicaly belongs to the “deferred” installation sequence.

 

 

 

 

 

 

 

 

Ontrex Best Practices Part II – ProductVersion

Our Ontrex Best Practices series continues with a very underestimated topic.

We are talking about the ProductVersion Property today.  As many of you already may know the property has to be formatted as follows:

major / minor / build 255.255.65535 (Source: http://goo.gl/Dj3l2)

Usually when we are repackaging we try to adapt the original Product Version as good as possible. But Unfortunately sometimes the vendor’s intended product version does not really fit in this schema which causes several problems like

  • Not possible to take over the version at all (eg. 2010.10.10) because it simply doesnt fit into the maxium values of 255.255.65535
  • They only increment the fourth field which is simply non-existent in Windows Installer
  • They add some strange leading zeros into some fields (Why?)

We have now enforced some general guidelines regarding this to encounter any problems which may be caused by those strange vendor habits:

  1. We only keep the first three  fields of any original product version (e.g 10.3.181.14 becomes 10.3.181), Major Upgrade is still possible (however limited) but causes an ICE error. Joining 2 fields together is strictly forbidden.
  2. Leading zero’s have to be eliminated from any field (e.g 1.09.10 becomes 1.9.10)
  3. Any non fitting Product version will be resetted to 1.0.0 (eg. 2010.23.1)

To conclude my blog article i really want to appeal to all developers out there:

Please try to adapt the windows installer product version schema. And avoid, at all costs, having only incremented the fourth field for any reasons. The fourth field should, if present, be used as build number only.

Therefore my recommendation for a versioning schema is as follows:

Major Release(255) . Feature Enhancements (255) .  Bugfixes / Patches (65535) . Build Number (Unrelevant and ignored by Windows Installer anyway)

And, of course, do not use any kind of date for the versioning schema! :)

 

 

 

 

 

Wise Package Studio excludes *.swp files per default.

During packaging a very common software we ran against the problem that SetupCapture did not capture all files in the installation.

After some investigation we found out that WPS exludes *.swp and other file extensions per default. This however may lead to incomplete snapshot results.

We therefore recommend to remove any file extensions entry from your SetupCapture Configuration which apply to ‘all directories’ :

However if you dont want to exclude those entries permanently you may include them on a per snapshot basis on the “SetupCapture Exclusions” screen.

 

Managed Office Addins

Als Managed Office Addins bezeichnet man in .NET entwickelte Erweiterung für die Office Suite. In diesem Artikel gehen wir auf einige wissenswerte Informationen ein.
Per User Addin -> ONLY!
In Office 2007 konnte man “Managed Office Addins” bisher nur auf per User Basis installieren. Für jeden Setup Author /Repackager in “Multi-User” Umgebungen eine wahre Katastrophe.
In Office 2010 hat Microsoft die uns erhöhrt und erlaubt per Machine “Managed Office Addins”. Und das allerschönste? Per (optionaler)Patch und Registry Tweak funktioniert dies nun auch unter Office 2007.
Troubleshooting
Das Addon disabled sich sofort und keine Ahnung warum? Mittels einfacher Environment Variabel macht man “Managed Office Addins” sehr gesprächig.
Man erfasst folgende Environment Variable (oder setzt sie bevor man die Office Applikation startet).
VSTO_SUPPRESSDISPLAYALERTS = 0
Und schon sind die Addins informationsfreudiger:
Quellen:

ActiveSetup unter x64 Betriebsystem

Ein in der Repaketierung sehr beliebtes Instrument um “Per-User” Resourcen zu installieren stellt das ActiveSetup dar.

Wer erwägt seine MSI-Pakete ebenfalls auf einem x64 OS zu installieren muss diesen allerdings doppelt erfassen.  Wieso fragen Sie sich sicher?

Das Problem liegt im Detail: Die Windows Shell auf einem x64 Betriebsystem ist natürlich, überraschung ein 64-Bit Prozess,  und der Active-Setup Registry Bereich ist gemäss Microsoft kein “gesharter” Key Bereich. Daher wird beim Logon-Prozess nur der x64 Bereich “abgearbeitet”.

Eine saubere und TerminalServer-Aware Lösung für dieses Problem sieht wie folgt aus:

Die Komponente für das ActiveSetup wird doppelt implementiert, und einmal mit aktivierten “64-Bit Component” Flag, damit die Registry Keys auch definitiv im 64-Bit Bereich geschrieben werden.

Da Registry Keys jeweils nur zu einer Komponente gehören dürfen, müssen diese natürlich doppelt erfasst werden:

Ansonsten gelten natürlich die üblichen ActiveSetup Best Practices. Und um es nochmals definitiv klarzustellen: Diese Implementation wird auch bei x86-Paketen benötigt.

 

 

Microsoft APP-V 4.6 SP1 – Web Artikel

Mit dem Release des Service Packs 1 für Microsoft Application Virtualization 4.6 sind auch einige neue technische Artikel im Web erschienen.

In diesem Artikel fassen wir die wichtigsten zusammen:

Das offizielle “Changelog” von Microsoft kann sich unter folgendem Link ansehen:

 

Generelle App-V Troubleshooting Techniken

Wie viele vielleicht bereits wissen ist das SPA Atelier auch in der Software-Virtualisierung tätig.

Aufgrund den Erfahrungen aus diversen Kundenprojekten mit APP-V haben sich gewisse “grundlegende” Troubleshooting-Techniken bei uns eingebürgert, welche wir auch unseren Kunden empfehlen.

Wichtig ist jedoch zu wissen, das diese Techniken nur für Virtualisierungs-”Kandidaten” funktionieren. Bekannte technische Einschränkungen wie System-Treiber etc. können hiermit nicht umgangen werden.

Installation in default Path

Auch im Jahr 2010 gibt es leider immer noch Applikationen mit “hardcodierten” Pfäden. Nach einer Installation auf das Asset-Drive verweigern diese Programme dann natürlich jegliche Dienste.
Eine Installation in den default Path ist die Lösung für dieses Problem.

Enforce Security Descriptors

Ist seit APP-V 4.5 standardmässig aktiv. Bedeudet nichts anderes als das “Berechtigungen” auch innerhalb der APP-V Bubble gelten.

Das deaktivieren dieser Option hat folgenden Effekt für die App-V Benutzer:

  • Schreibrechte auf alle im APP-V Paket (existierende) Registry Keys
  • Schreibreche auf alle im APP-V Pakete existierende VFS Files
  • Voller Zugriff auf den Assetfolder (Q:example.001

Die meisten Berechtigungsprobleme sollten dann Passé sein.

LOCAL INTERACTION ALLOWED

Haben Sie folgende Phänomene in einer virtuellen Applikation?

  • MAILTO: Funktioniert nicht.
  • Interaktionen mit “Basis”/nicht virtualisierten Applikationen funktioniert nicht.

Dann hilft der LOCAL_INTERACTION_ALLOWED Flag! Dieser lässt sich wie folgt aktivieren:

„VIRTUALENV” öffnen.

Rechtsklick auf “VIRTUALENV”.

„Element” -> „Add” -> „Policies”.

Dann ebenfalls Rechtsklick auf „Policies”. 
„Element” -> „Add” -> „LOCAL_INTERACTION_ALLOWED”.

Nun wählt man das Element „LOCAL_INTERACTION_ALLOWED” aus und trägt beim „Element Text „ den Wert „TRUE” ein.

Dieser muss übrigens pro Applikation/OSD aktiviert werden.

Auf X86 OS mit X86 Sequencer sequenzieren

Last but not least sollte man, sofern es sich um eine 32-Bit/x86 Applikation handelt, die Applikation auf einem x86 Betriebsystem zu sequenzieren.
Wichtig: Man darf danach das Projekt nicht mehr mit einem x64 Sequencer öffnen!

Erweiterte Troubleshooting Techniken

CMD in Applikationscontext starten.

Um Probleme besser analysieren zu können, muss man die Registry/File Ansicht aus Applikationssicht sehen.

Mittels folgendem Trick kann man eine beliebige „base” Applikation aus der Bubble hinaus starten und somit alle virtualisierten Files & Registry Keys sehen:

Sfttray.exe /exe „cmd.exe” /launch „Microsoft WOrd 2010 14.0.xxx”

„Cmd.exe” kann durch jede beliebige Applikation ersetzt werden (bsp. Regedit etc.).

„Microsoft WOrd 2010 14.0.xxx” ist der Applikationsname der virtualisierten Applikation.

PROCMON

Schlagen alle bisherigen Techniken fehl bleibt nur noch das Troubleshooting mittels Procmon & ProcExp.

Folgender Ablauf wird empfohlen:

  • ProcMon starten mit Standard Filter Rules.
  • Applikation starten bis Fehler auftaucht.
  • Capture stoppen und mittels Process Explorer ermitteln welcher exakte Prozess die Fehlermeldung anzeigt.
  • Filter setzen für diese Applikation.
  • Nach Gefühl filtern, die üblichen Verdächtigen sind:
  • NAME_NOT_FOUND
  • ACCESS_DENIED

Adobe Reader X

Seit letztem Freitag steht der neue Adobe Reader X von Adobe zum Download bereit.

Die wichtigste Neuerung ist ein Sandbox Modus welcher für eine allgemeine Erhöhung der Sicherheit sorgen soll.

Die Software wird natürlich demnächst als Direct-Package-Download in unserem Portal zur Verfügung stehen.

Quelle: http://www.heise.de/security/meldung/Adobe-Reader-X-mit-Sandbox-fuer-Windows-verfuegbar-1139095.html

16-Bit Applikationen mit APP-V Sequencen

Microsoft hat ab APP-4.5 das Registry Hooking vom Kernel-Mode in den User-Mode verschoben (Quelle: http://technet.microsoft.com/en-us/library/cc843672.aspx), dies verursacht bei 16-Bit Applikationen das Problem das diese nicht mehr korrekt sequenziert werden (fehlende Registry Keys).
Damit das Sequencen auch bei 16-Bit Applikationen weiterhin korrekt funktioniert ist daher ein kleiner Eingriff notwendig, so das jede “Windows NT Virtual Dos Machine” in einem seperaten Prozess aufgestartet wird.
Mit folgendem Workaround funktioniert das Sequencen wieder Ordnungsgemäss:
Unter “HKLMSYSTEMCurrentControlSetControlWOW” setzt man den “DefaultSeparateVDM” Value auf “yes”.
Danach ist nur noch ein Neustart des Betriebsystems notwendig und die 16-Bit Applikationen sollten sich wieder korrekt sequenzieren lassen.
Diese Einstellung muss man übrigens NICHT auf den Ziel-Clients durchführen.