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:
image001

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.
image002
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:

image003

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)

# 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 
# 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

image005

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.

image006

image007

image005

image002

Abschließend das Paket speichern und testen.