App-V 5 Rezept SQL Server Management Studio 2016 bzw. SSMS 17.x
Das Rechtliche zuerst: Die hier genannte Anleitung nutzt ihr auf eigene Gefahr. Ich kann nicht garantieren, dass alles immer gut funktioniert und übernehme keine Haftung für Schäden. Ich würde mich dennoch über eine Rückmeldung bei Problemen freuen, um andere in der Community zu unterstützen.
Hinweis: Wenn ihr mich und diesen Blog unterstützen wollt, dann kauft mein App-V 5 Buch (in deutscher Sprache): https://www.amazon.de/Softwarevirtualisierung-mit-App-V-Ein-Praxisbuch/dp/1544717318
Vor einigen Tagen habe ich mit einem unserer besten Citrix Spezialisten und Mitautor des Rheinwerk Buchs zu XenDesktop 7.x Jan Hendrik (Jan Hendriks genialer Citrix Blog) und seinem Kollegen Tobias einen Paketierungsworkshop für App-V gehalten. Hier ging es insbesondere um Applikationen, bei denen die Paketierung nicht funktioniert hat. U.a. war auch das SQL Server Management Studio 2016 bzw. SSMS 17 ein Thema. Das ließ sich auch mit dem App-V Rezept für SSMS 2014 nicht mehr paketieren.
Beim Versuch das SQL Server Management Studio 17 zu sequenzieren und zu speichern, kommt es zu dem Fehler HRESULT: 0x8007139F. Scheinbar funktioniert der App-V 5 Sequencer mit einigen Komponenten aus dem Paket nicht (@Microsoft – das ist ein Bug im Sequencer). Weiterhin gibt es keine Möglichkeit mehr, Visual Studio Shell 2015 (isolated) separat bei Microsoft herunter zu laden. In dem Blog von Rorymon gab es dazu nur noch den Hinweis, dass Microsoft das Management Studio (SSMS 17) für App-V nicht (mehr?) unterstützt. Ich denke, die fehlende Herstellerunterstützung trifft für viele Anwendungen zu. Daher haben wir es einfach einmal probiert (das ist schließlich eine Herausforderung).
Wenn man sich das Problem nun mit dem Prozessmonitor genauer anschaut, findet sich schnell die Komponente, die das HRESULT verursacht:
Bzw.
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Applications.Utilities.ProjectRetargetService.resources
In diesem Verzeichnis liegen nun „nur“ Sprach-Ressource-Dateien u.a. auch für eine deutsche Komponente des Visual Studios. Wenn man diese Dateien löscht, switcht an dieser Stelle eine DotNet WPF Anwendung automatisch auf den Standard „Englisch“ um.
Und das Speichern erfolgt nun auch ohne Probleme und das SQL Management Studio startet sogar als App-V Paket.
Im Weiteren kam es zu dem Problem mit der Lizensierung. Wir erinnern uns - vor einigen Jahren wurde die Express Edition des Visual Studios durch die Community Edition ersetzt, die genau wie die Professional Edition lizensiert sein muss. Die Lizensierung scheint hierbei an der SID des Systems zu hängen. App-V Rezepte für das SQL Management Studio 2012 und 2014 haben daher die Komponente „Visual Studio Shell 2010 (Isolated) separat installiert. Nun, SSMS 17.x (SQL Server Management Studio 2016) installiert eine Komponente „Visual Studio Shell 2015“. Diese Komponente ist leider nicht separat als Download erhältlich. Aber wenn man danach sucht gibt eine Möglichkeit, sich diese Komponente aus einer vorhandenen Installation zu extrahieren :-)
Wenn das SQL Server Management Studio SSMS 17 hingegen in provisionierten Systemen genutzt wird, muss man sich nicht diese Mühe machen. Bei einem Lizensierungsproblem bekommt ihr den folgenden Dialog:
Wir haben also zwei Rezepte (Masterimage und Standardinstallation). Installiert wird mit einem Sequencer 5.1 auf einem Windows 8.1 Client.
SSMS 17 für neuinstallierte Systeme (die SID ändert sich)
- Patchen des Sequencers auf einen aktuellen Stand (ansonsten kann SSMS nicht installiert werden)
- Sequencer Snapshot erstellen
- Sequencer Snapshot zurücksetzen
- Installation ohne Sequencer des SSMS 17 (SSMS-Setup-ENU.exe oder SSMS-Setup-DEU.exe für die deutsche Version) https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms
- Extrahieren der Visual Studio Shell 2015 Komponenten mit dem folgenden PowerShell (Get-VSISOShell.ps1). Das Skript erzeugt einen Ordner SSMSRuntime im Skriptverzeichnis:
# Extract all Visual Studio runtime (Visual Studio Shell 2015 (Isolated)) # elements from a SSMS Installation # 2017' Andreas Nick # fist: install SSMS 17.2! if(-NOT (Test-path 'C:\ProgramData\Package Cache\FE948F0DAB52EB8CB5A740A77D8934B9E1A8E301\redist\vs_isoshell.exe' )) { Write-Verbose "install SSMS 17.2!" -Verbose } if( -not (test-path "$PSScriptRoot\SSMSRuntime")) { New-Item "$PSScriptRoot\SSMSRuntime" -ItemType directory | out-null } Write-Host "Extract all Visual Studio runtime (Visual Studio Shell 2015)" -ForegroundColor Cyan Write-Host "Copy vs_isoshell.exe" -ForegroundColor Yellow Copy-Item 'C:\ProgramData\Package Cache\FE948F0DAB52EB8CB5A740A77D8934B9E1A8E301\redist\vs_isoshell.exe' -Destination "$PSScriptRoot\SSMSRuntime\" -Force Write-Host "Copy VS14-KB3095681.exe" -ForegroundColor Yellow Copy-Item 'C:\ProgramData\Package Cache\02A26E554FBB4232ACD36E70D09F2C7893D399CD\redist\VS14-KB3095681.exe' -Destination "$PSScriptRoot\SSMSRuntime\" -Force Write-Host "Copy vsta_setup.exe" -ForegroundColor Yellow Copy-Item 'C:\ProgramData\Package Cache\5E6157D16EC044A823B2FD2C030ED6DECD2E997E\redist\vsta_setup.exe' -Destination "$PSScriptRoot\SSMSRuntime\" -Force Write-Host "Copy vsta_ls.ex" -ForegroundColor Yellow Copy-Item 'C:\ProgramData\Package Cache\4F812BBB2BE7E30CED293F8A229A5410D70DE6DB\redist\vsta_ls.exe' -Destination "$PSScriptRoot\SSMSRuntime\" -Force Write-Host "Finish (wait 5 seconds)" -ForegroundColor Cyan Start-Sleep -Seconds 5
- SSMSRUNTIME Verzeichnis mit folgendem Inhalt sichern
- Sequencer Snapshot zurücksetzen
- Nun erst einmal das DotNet Framework 4.6.1 und die SSMSRUNTIME Komponenten auf dem Sequencer installieren. Dazu kann das folgende Skript genutzt werden (als Administratior):
# Install Visual Studio Shell 2015 (Isolated)) and components from SSMS 17.2 # 2017' Andreas Nick Write-Host "Install Visual Studio runtime (Visual Studio Shell 2015)" -ForegroundColor Cyan Write-Host "Install vs_isoshell.exe" -ForegroundColor Yellow
(Start-Process "$PSScriptRoot\SSMSRuntime\vs_isoshell" '/passive' -wait -Passthru).ExitCode Write-Host "Install VS14-KB3095681.exe" -ForegroundColor Yellow (Start-Process "$PSScriptRoot\SSMSRuntime\VS14-KB3095681.exe" '/passive' -wait -Passthru).ExitCode Write-Host "Install vsta_setup.exe" -ForegroundColor Yellow (Start-Process "$PSScriptRoot\SSMSRuntime\vsta_setup.exe" '/passive' -wait -Passthru).ExitCode Write-Host "Install vsta_ls.ex" -ForegroundColor Yellow (Start-Process "$PSScriptRoot\SSMSRuntime\vsta_ls.exe" '/passive' -wait -Passthru).ExitCode Write-Host "Finish (wait 5 seconds) - the system need a reboot" -ForegroundColor Cyan Start-Sleep -Seconds 5
- Jetzt den Sequencer starten und das SSMS 17.x installieren
- Select „Create New Virtual Application“
- „Create Package (default)“ Next>
- „Standard Application (default)“ Next>
- „Select Installer“ SSMS-Setup-ENU.exe (für die englische Version) oder SSMS-Setup-DEU.exe (für die deutsche Version)
- Aufzeichnung des Sequencers starten und SSMS 17 installieren
- Die Installation läuft nun durch.
- Das Paket weiterbearbeiten und ggf. die Shortcuts und FTA’s anpassen
- On the „Advanced“ tab Allow Com“ und „full write permission“ in the package
- Optional: Im Paket die Ordner VFS\Windows\Installer und VFS\Common AppData\Package Cache (ca. 1GB groß) entfernen. Das Paket hat anschließend eine große von ca. 500 MB
- Optional: Visual C++ Runtime nicht mit paketieren, „der Harken dafür muss raus“ – jetzt kann auch VFS\Windows\winsxs gelöscht werden.
Nun das Paket als App-V Paket speichern. Damit das Paket funktioniert müssen die Visual Studio Shell 2015 (Isolated) Komponenten immer zuvor installiert werden. Aber dafür könnt ihr das Skript oben nutzen.
SSMS für Masterimage basierende Systeme (PVS)
Wenn das SSMS auf einem geklonten System genutzt wird (Masterimage und/oder PVS) ändert sich die SID nicht und die Lizensierung funktioniert auch mit VSShell 2015 im Paket.
- Installation des DotNet Framework 4.6.1
- Patchen des Sequencers, da auf älteren, ungepatchten Systemen der SSMS nicht installiert werden kann
- Sequencer Snapshot erstellen
- Den App-V 5 Sequencer starten
- Select „Create New Virtual Application“
- „Create Package (default)“ Next>
- „Standard Application (default)“ Next>
- „Select Installer“ SSMS-Setup-ENU.exe (für die englische Version) oder SSMS-Setup-DEU.exe (für die deutsche Version)
- Aufzeichnung des Sequencers Starten und SSMS 17 installieren
- Restart des Sequencers, Sequencer booten lassen. Das System macht anschließend weiter
- Select „I am finished installing“ and Next>
- Next>
- Nun das SQL Management Studio „NICHT“ starten. Bei Start the SQL Management Studio einfach nur Next> wählen
- Select Costomize and Next>
- If you don’t need a feature block 1 select „Next>“ on „Run each program…“
- „Allow this package to run on any operating system“ and Next>
- „Continue to modify“ und Next> anschließend Close drücken
- Edit the shortcuts und fta’s (remove unwanted)
- On the „Advanced“ tab Allow Com und full write permission in the package
- Jetzt im VFS den folgenden Ordner löschen:
- VFS\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Applications.Utilities.ProjectRetargetService.resources
Dieser Ordner enthält nur Ressource-Dateien für andere Sprachen einer bestimmten Komponente. Das Visual Studio sollte dennoch weiter funktionieren. Diese kleine Komponente erscheint anschließend in English. Wer das nicht möchte, kann sein System auch mit der ersten Anleitung installieren!
- Alternativ könnte man auch über ein Skript diese Dateien in das App-V Paket einbinden. Ich erachte das nicht für notwendig. Wenn das nicht gemacht wird, kommt es zum HRESULT: 0x8007139F Fehler beim Speichern des Paketes.
- 21. Optional: Im Paket die Ordner VFS\Windows\Installer und VFS\Common AppData\Package Cache (ca. 1GB groß) entfernen. Das Paket hat anschließend eine Große von ca. 500 MB
22. Optional: Visual C++ Runtime nicht mit paketieren „der Harken dafür muss raus“ – jetzt kann auch VFS\Windows\winsxs gelöscht werden.
Abschließend das Paket speichern und testen.