Friday, 17 February 2017

Smart Mirror Sales

On a slight different subject to normal I have launched a Smart Mirror product on my website 

This product runs an android based app to display handy information to users.
This is displayed thru a standard looking mirror frame allowing you to blend the tech with your decor.

Thursday, 30 June 2016

Citrix Session reliability screenshot of the user experience

The Citrix Session reliability feature has been around for ages. It has changed its behavior a bit recently dependent on Citrix Receiver Version. The following show the differences for the end-user experience. Thanks to Kaleigh at Citrix for her help with this.

Citrix Receiver 3.4 - This shows a reconnecting systray bubble. 
Citrix Receiver 3.4

 Citrix Receiver 4.0 thru 4.2 - This shows a systray bubble and grey's the window to show its not active

Citrix Receiver 4.0

Citrix Receiver 4.3 & 4.4 This shows a systray bubble with newer logo and connection interrupted message. The window goes grey the window to show its not active
Citrix Receiver 4.3

Tuesday, 7 June 2016

Citrix ICA file behaviour (some of it)

When connecting to a Citrix environment the connection between end-point and resource is established via an ICA file. (receiver for web)

The ICA file is generated by storefront and delivered back to the end-point.

ICA file Location
The ICA file get stored in the users
"%Appdata%\local\Temp" or "%LocalAppData%\Local\Citrix\Web Helper\Temp\2"

ICA files downloaded 
IE downloads - 4 ICA files
Chrome downloads - 2 ICA files
Firefox - 4 ICA Files
(Note : 4 files are downloaded for desktops and 2 for published applications)

File Assocation
The ICA file is then launched via file Association to open Citrix Receiver or Citrix Connection Manager.

File Delete
When the session is disconnected or logged off the ICA file should be deleted. This is contolled via the Default.ICA file on storefront with the setting RemoveICAfile=Yes

My testing showed that Firefox did not always clean up the ICA files on logoff or disconnect and left 1 ICA file behind. This was always true when "Connection Manager" was used to open ICA files. When Receiver was used within Firefox the ICA files removed as expected.
It was noticed that ICA files are always called ICAxxxx except in firefox with connection manager which names the files WEQ3xxxxx

Monday, 6 June 2016

Citrix XenApp 7 - Application not running

When looking at a recent XenApp 7 environment i noticed a number of disconnected users listed with a strange session state of "Application not running"

After examining these user sessions i could see that how a lingering systray process APPVStreamingUX.exe.

This is a known process that should be placed in the LogoffCheckSysModules registry key to ensure the logoff is not held up waiting for this process to close.

Thursday, 2 June 2016

Storefront 3 - Cannot complete your request

I experienced the 1st connection to a storefront store each day gave the user a
"Cannot complete your request" message

If they user clicked to logon again it is successful.
The eventvwr showed Event ID 17 for each failure.

Typically this is caused by AV locking a file on first connection. However AV was not the culprit in my scenario. The AV Exceptions for reference are

\inetpub\temp\IIS Temporary Compressed Files 

\Program Files\Citrix\Receiver StoreFront\Services\SubscriptionsStoreService

To correct the issue I needed to change file change notifications.
Info from Microsoft here.

The change required is

For .NET 4 or lower

·         HKLM\Software\Microsoft\ASP.NET\FCNMode  DWORD = 1
           HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\FCNMode DWORD = 1

  For .NET 4.5 and Higher
            o   Starting with the Microsoft .NET Framework 4.5 and later
            versions, FCNMode can be configured by using the httpRuntime

            settings as follows:

Wednesday, 4 May 2016

Force Citrix Sessions Full Screen

The Citrix Receiver remembers the windows settings and size for each connection.

These are stored in

If you want to override all of the individual settings and for example force full screen each time you can set the following key in the Root

ForceFullScreen  REG_DWORD = 1

Friday, 29 April 2016

Citrix Storefront Tweaks

There are a number of settings that should be reviewed for a Storefront Installation.
This blog gives a great list of each along with how to set the option.

Wednesday, 20 April 2016

Prevent Citrix Receiver Pop Up Asking for Logon credentials

Citrix receiver has an annoying habit of prompting for user credentials when it try's to connect to a storefront store. This can happen when a user is not even attempting to use the Reciever.

This behavior is highly annoying. Especially if there is no requirement for the user to connect to a store.

The Prompt can be disabled with the following registry key

32 Bit - HKLM\Software\Policies\Citrix
64 Bit - HKLM\Software\Wow6432Node\Policies\Citrix

Add the following DWORD entry and set to 0

EnableX1FTU  (for older Receivers the entry is EnableFTU)

Citrix Storefront AV Settings

The following are some additional Storefront AV exclusions that can be considered in the event that you are getting "Cannot complete request" error messages at logon.

\inetpub\temp\IIS Temporary Compressed Files
\Program Files\Citrix\Receiver StoreFront\Services \SubscriptionsStoreService

A good central list of Citrix AV guidelines is available here

Thursday, 10 December 2015

Compare File Permission with powershell instead of calcs , xcacls, Icacls

The following Powershershell is handy, it will compare 2 directories ACLs and report any differences.

[System.IO.FileInfo] $outputFile = "C:\temp\AclCompareDump.txt"
[System.IO.DirectoryInfo] $searchDirSource = Read-Host -Prompt "Enter source project folder path to search"
[System.IO.DirectoryInfo] $searchDirTarget = Read-Host -Prompt "Enter target project folder path to search"

if ($outputFile.Exists)

if ($searchDirSource.Exists -and $searchDirTarget.Exists)
   foreach ( $sourceProject in $( Get-ChildItem $searchDirSource | where { $_.psIsContainer -eq $true } ) ) {
        $targetProject = Get-Item $($searchDirTarget.FullName + "\" + $sourceProject.Name)

        foreach ( $sourceArea in $( Get-ChildItem $sourceProject.FullName | where { $_.psIsContainer -eq $true } ) ) {
            $targetArea = Get-Item $($targetProject.FullName + "\" + $sourceArea.Name)

            foreach ($sourceTaskFolder in $($sourceArea | Get-ChildItem | where { $_.psIsContainer -eq $true }) ){
                $targetTaskFolder = Get-Item $($targetArea.FullName + "\" + $sourceTaskFolder.Name)

                $currentAcl = Get-Acl $sourceTaskFolder.FullName
                $refacl = Get-Acl $targetTaskFolder.Fullname

                Write-Progress -Activity "Searching source for folder ACLs..." -Status ("Comparing " + $sourceTaskFolder.FullName + " to " + $targetTaskFolder.FullName)

                $comparison = compare-object $refacl $currentAcl -Property Access
                if ($comparison -ne $null)
                    $sourceTaskFolder.Fullname | Out-File $outputFile.FullName -Append
                    [int] $hits += 1
                $comparison = $null

    if ($hits)
        & notepad.exe $outputFile.Fullname
        Write-Warning "All target ACLs matched the source ACLs."