So you have have SiteManager and you want to virtualize this app into Citrix. You may have noticed there are some caveats with. One of the issues that we encountered (we’ve been running this for several years across several versions now), is that you have to be creative to separate users because of the reporting port that is needed.
When a user logs in, it creates a port based on the INI file. That works all fine and well until player two enters the arena. So….. We had to utilize a set of scripts to create this separation of user space and create the random port per user. We’ve tried these in powershell and VB script. There wasn’t any performance difference or ease of configuration from what we found. I’ve added the scripts below so that you can more easily onboard this app into XenApp.
This launching script you will point in Citrix Studio is the one below. It is a batch script .bat.
REM TransportLaunch @echo off start /wait C:\SMAPP\FileshareMapDrives.vbs start /wait C:\SMAPP\SmappUpdateINI.vbs start /B /D Y:\SMAPP318-CTXTST\ C:\SMAPP\smapp.exe
This one will run and call the other visual basic scripts that actually do the work.
The first work script is to map the drive we are going to store the smdb file and the smapp.ini file that will contain the random port number.
'FileshareMapDrives checks "fileshareserver" fileshare share for the user's app configuration directory. 'If it is not there, it creates it and maps the "M" drive in the citrix session to it. DIM fso, MyFile, strCurrentLine, strPortNum, strNewPortNum, strUserName, CitrixServer 'Determine which Citrix server you have attached to. Set WSHNetwork = CreateObject("WScript.Network") ' CitrixServer = WSHNetwork.ComputerName CitrixServer = "fileshareserver" Set fso = CreateObject("Scripting.FileSystemObject") ' Retrieve logged in username strUserName = WSHNetwork.UserName ' Determine if the user's directory exists. If not create it If fso.FolderExists("\\" & CitrixServer & "\fileshare\" & strUserName) THEN Else fso.CreateFolder("\\" & CitrixServer & "\fileshare\" & strUserName) End If ' Map new Drive for the INI file On Error Resume Next WSHNetwork.MapNetworkDrive "M:", "\\" & CitrixServer & "\fileshare\" & strUserName If Err.Number <> 0 Then On Error GoTo 0 WSHNetwork.RemoveNetworkDrive "M:", True, True WSHNetwork.MapNetworkDrive "M:", "\\" & CitrixServer & "\fileshare\" & strUserName End If On Error GoTo 0 'wscript.sleep(5000) 'wscript.echo "Maps are done" 'SmappUpdateINI DIM fso, MyFile, strCurrentLine, strPortNum, strNewPortNum, strUserName, CitrixServer
After the above script runs, it will have your location mapped to point the smapp.exe file to the smapp.ini file it will need to load. Next up, the smappupdate.ini script, which is also a visual basic script.
Set fso = CreateObject("Scripting.FileSystemObject") If fso.FolderExists("M:\SMAPP318-CTXTST") THEN ' wscript.echo "M:\SMAPP318-CTXTST exists" Else fso.CreateFolder("M:\SMAPP318-CTXTST") ' wscript.echo "M:\SMAPP318-CTXTST did not exist and I just created it" End If ' Determine if the directory SMAPP318-CTXTST exists. If not create it If fso.FileExists("M:\SMAPP318-CTXTST\SMDBL00.DB") Then Else fso.CopyFile "\\sharelocation\SMAPP318-CTXTST\SMDB\SMDBL00.DB", "M:\SMAPP318-CTXTST\", True End If If fso.FileExists("M:\SMAPP318-CTXTST\SMAPP.INI") Then Else ' Open the file. Change the path to where you have your file saved. Set MyFile = fso.OpenTextFile("\\sharelocation\SMAPP318-CTXTST\SMDB\SMAPP.INI", 1, TRUE) ' Create a temp file to copy into. Set fs1 = fso.CreateTextFile ("\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt",True) fs1.close Set MyFile2 = fso.OpenTextFile ("\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt", 8) ' Copy each line into the temp file. Do Until MyFile.AtEndOfStream Line = MyFile.ReadLine ' Increment the port number by 1. If InStr(1,Line, "Status Monitor Port=",1) Then strPortNum = Right(Line, 5) PortNum = CLng(strPortNum) PortNum = PortNum + 1 strNewPortNum = Cstr(PortNum) MyFile2.WriteLine("Status Monitor Port=" & strNewPortNum) else MyFile2.writeline line End If Loop Set MyFile = nothing Set MyFile2 = nothing ' Copy the temp file over original file and create a backup copy (UserName.bak). fso.CopyFile "\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt", "\\sharelocation\SMAPP318-CTXTST\SMDB\SMAPP.INI", true fso.CopyFile "\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt", "\\sharelocation\SMAPP318-CTXTST\SMDB\" & strUserName & ".BAK", True fso.CopyFile "\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt", "M:\SMAPP318-CTXTST\SMAPP.INI", true ' MyFile2.Close ' Set MytFile2 = nothing fso.DeleteFile "\\sharelocation\SMAPP318-CTXTST\SMDB\Temp.txt" End If
With these three scripts, you should be able to run SiteManager in your XenApp environment!