Het was altijd mogelijk om verschillende NAV (Navision, Microsoft Dynamics NAV) clients naast elkaar te installeren. Meestal was het gewoon een kwestie van de oude client naast de nieuwe kopiëren, en het werkte dan eigenlijk altijd wel. Met NAV 2009, 2013 en 2013R2 werkte dat al iets anders: Er moest in ieder geval een versie van elk geïnstalleerd worden. Gelukkig hadden ze daar Microsoft ook rekening mee gehouden, zodat de verschillende clients en servers naast elkaar konden worden geïnstalleerd.

Met de installatie van NAV2013R2 naast NAV2013 ontstaat er echter wel een probleem: Als je vanuit de developmentclient van NAV2013 een object start, gaat dat de eerste keer goed. De tweede keer crashed de client, met een aantal meldingen in de logs:


Toepassing: Microsoft.Dynamics.Nav.Client.exe
Framework-versie: v4.0.30319
Beschrijving: het proces is beëindigd als gevolg van een onverwerkte uitzondering.
Uitzonderingsinformatie: System.AccessViolationException
Stack:
bij Microsoft.Dynamics.Nav.Client.INavClient.GetClientInfo(System.String ByRef, System.String ByRef, System.String ByRef, System.String ByRef, System.String ByRef, System.String ByRef, Int32 ByRef, Boolean ByRef, Boolean ByRef)
bij Microsoft.Dynamics.Nav.Client.NavRunningClient.IsSuitableClient(System.Uri, Microsoft.Dynamics.Nav.Client.INavClient, HostComparer)
bij Microsoft.Dynamics.Nav.Client.NavRunningClient.OpenHyperlinkInRunningClient(System.Uri, Boolean)
bij Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.PreRun(Boolean ByRef)
bij Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunCore()
bij Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.Run(Boolean)
bij Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunAndDispose()
bij Microsoft.Dynamics.Nav.Client.Program.ExecuteNormally(System.Func`1<Int32>)
bij Microsoft.Dynamics.Nav.Client.Program.Main(System.String[])


 

Om dit op te lossen is er een nieuwe build van NAV2013R2 nodig. Die zul je moeten aanvragen bij Microsoft (via Partnersource, bijvoorbeeld). Het gaat specifiek om Build 7.1.35866.0. Deze zou beschikbaar moeten worden via KB artikel 2907588. Daarnaast moeten er nog een aantal dingen handmatig worden gedaan. Het is met deze build helaas niet mogelijk om de DVD aan te passen, omdat de installer aangepast moet worden. Daardoor kan dit niet in de huidige hotfixes worden meegenomen, blijkbaar...

Na het overschrijven van de bestanden moet je het volgende doen:

Regasm /register Microsoft.Dynamics.Nav.Client.Winforms.dll /tlb. (regasm staat in de map C:\Windows\Microsoft.NET\Framework\v4.0.30319, de Microsoft.Dynamics.Nav.Client.Winforms.dll moet het zojuist nieuw gekopieerde bestand zijn, dus de 7.1 versie. Als het goed is, zijn de sleutels HKEY_CLASSES_ROOT\TypeLib\{7C0C4D36-0FA7-4840-B27C-166F91BC9E57}\7.1 en HKEY_CLASSES_ROOT\Interface\{59521B62-D441-47E6-8224-A07203686BA2} nu aangemaakt. (het volledige commando is bij een standaard installatie C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /register "c:\program files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client\Microsoft.Dynamics.Nav.Client.Winforms.dll" /tlb...)

Verwijder de sleutel: HKEY_CLASSES_ROOT\TypeLib\{5020AC1E-A4F0-402B-A920-3FED4E3B05CC}\7.1

Verwijder de sleutel HKEY_CLASSES_ROOT\wow6432node\TypeLib\{5020AC1E-A4F0-402B-A920-3FED4E3B05CC}\7.1

Verander in de  sleutel HKEY_CLASSES_ROOT\Interface\{14519985-4959-4F7C-AC30-CBBCD9DFBC08}\TypeLib de waarde van Version van 7.1 naar 7.0

Verander in de sleutel Add HKEY_CLASSES_ROOT\wow6432node\Interface\{14519985-4959-4F7C-AC30-CBBCD9DFBC08}\TypeLib de waarde van Version naar 7.1 naar 7.0

Verander in de sleutel HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{E3041209-EDEA-36B5-ADE4-51E7751BE082}\TypeLib de waarde van Version van 7.1 naar 7.0.

Verander in de sleutel HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Interface\{E3041209-EDEA-36B5-ADE4-51E7751BE082}\TypeLib de waarde van Version van 7.1 naar 7.0

Kijk of waarde van Version in de sleutel HKEY_CLASSES_ROOT\Interface\{59521B62-D441-47E6-8224-A07203686BA2}\Typelib op 7.1 staat, en of HKEY_CLASSES_ROOT\TypeLib\{95819FD3-CF0A-4706-BE93-35B3DDCB817C}\7.1 bestaat. 

Herstart de services (ik denk niet eens dat het echt noodzakelijk is) en je zou nu vanuit beide clients onbeperkt weer objecten moeten kunnen starten.

 

Je kunt ook het volgende script gebruiken:

:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
@echo Do not close this window!
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges) 
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV %~s1", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
cscript "%temp%\OEgetPrivileges.vbs"
exit /B


:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
@setlocal & pushd .
@setlocal enabledelayedexpansion enableextensions
echo %cmdcmdline%
@set parameter="%1"
@if '%1' == 'ELEV' (set parameter="%2")
@set parameter=%parameter:"=%
@set parameter="%parameter%"
@if not exist %~dp0setup.exe goto skipinstall
@if [%parameter%] == [""] @start /wait %~dp0setup.exe
:skipinstall
@set InstallKey70="HKLM\SOFTWARE\Microsoft\Microsoft Dynamics NAV\70\RoleTailored Client"
@set InstallKey71="HKLM\SOFTWARE\Microsoft\Microsoft Dynamics NAV\71\RoleTailored Client"
@if [%processor_architecture%] == [AMD64] set InstallKey70="HKLM\SOFTWARE\wow6432node\Microsoft\Microsoft Dynamics NAV\70\RoleTailored Client" &&set InstallKey71="HKLM\SOFTWARE\wow6432node\Microsoft\Microsoft Dynamics NAV\71\RoleTailored Client"
::Delims = space & Tab
@FOR /F "tokens=2* delims=  " %%A IN ('REG QUERY %InstallKey70% /v path') DO SET NAV70=%%B
@FOR /F "tokens=2* delims=  " %%A IN ('REG QUERY %InstallKey71% /v path') DO SET NAV71=%%B
@Set NAV71="%NAV71%"
@if [%nav71%]==[""] @echo Dynamics NAV 71 not found&&Pause&&goto end
@for /F "tokens=*" %%a in ('@dir /b "%~dp0Microsoft.Dynamics.Nav.Client.Winforms.dll"') do (@set nav71="%~dp0")
@if [%parameter%] neq [""] set nav71=%parameter%
@Set nav71=%nav71:~1,-1%
::Change (actually, delete) registry entries
@Reg delete HKCR\TypeLib\{5020AC1E-A4F0-402B-A920-3FED4E3B05CC}\7.1 /f
@if [%processor_architecture%] == [AMD64] @Reg delete HKCR\wow6432node\TypeLib\{5020AC1E-A4F0-402B-A920-3FED4E3B05CC}\7.1 /f
@Reg delete HKEY_CLASSES_ROOT\Interface\{14519985-4959-4F7C-AC30-CBBCD9DFBC08} /f
@if [%processor_architecture%] == [AMD64] @Reg delete HKEY_CLASSES_ROOT\wow6432node\Interface\{14519985-4959-4F7C-AC30-CBBCD9DFBC08} /f
@Reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{E3041209-EDEA-36B5-ADE4-51E7751BE082} /f
@if [%processor_architecture%] == [AMD64] @Reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wow6432node\Interface\{E3041209-EDEA-36B5-ADE4-51E7751BE082} /f
::Register assembly
@if exist %~dp0Rollup\*.* @echo copy "%~dp0Rollup\*.*" "%nav71%\*.*" && @copy "%~dp0Rollup\*.*" "%nav71%\*.*"
@FOR /F "delims=" %%A IN ('dir c:\windows\Microsoft.net\regasm.exe /s /b ^| findstr k\v4') DO set file=%%A
@%file% /register "%nav71%\Microsoft.Dynamics.Nav.Client.Winforms.dll" /tlb
@if ["%NAV70%"] NEQ [""] do (@%file% /register "%nav70%\Microsoft.Dynamics.Nav.Client.Winforms.dll" /tlb)
@Echo Done!
:end
@if exist "%temp%\OEGetPrivileges.vbs" @del "%temp%\OEGetPrivileges.vbs"