Content Data Access - Fix location of the Content Directory - Application

Microsoft.AppVirtualization.Server.45.VirtualApplicationServer.ContentDataAccess_FixlocationoftheContentDirectory_Application (UnitMonitor)

The Content Data Access node monitors the ability of Application Virtualization Management Server to access the Content directory, which might be a local directory or a network share, and to read the requested files. The Content directory is where the packages, including .SFT files, reside.

Knowledge Base article:

Summary

The Content Data Access node monitors the ability of Application Virtualization Management Server to access the Content directory, which might be a local directory or a network share, and to read the requested files. The Content directory is where the packages, including .SFT files, reside.

Resolutions

This error code is addressed in Knowledge Base Article 931116

SYMPTOMS

When you start the
Application Virtualization Server service, you receive the following error message:
  • Windows could not start the Application Virtualization Server on Local Computer. For more information, review the System Event Log. If this is a non-Microsoft service, contact the service vendor, and refer to service-specific error code 41508.
Additionally, the following event is logged in the System log:
  • Event ID: 7024 Source: Service Control Manager Type: Error Description: The Application Virtualization Server service terminated with service-specific error 41508.
The following message is logged in the Application Virtualization Server log file (Sft-server.log):
41508 "Invalid root path : <path> "

Cause

Content Data Access problems occurs if one of the following conditions is true:
  1. The path of the content directory is not valid.
  2. The Application Virtualization Server logon account does not have the appropriate permissions to the content directory.

Content data access issues are mostly due to the access permissions on the content share. You can find the content directory location listed in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SoftGrid\4.5\Server\SOFTGRID_CONTENT_DIR registry value.

By default, the path of the content directory is as follows:  %ProgramFiles%\Microsoft System Center App Virt Management Server\App Virt Management Server\content

The path of the content directory is configured in the local registry of the Application Virtualization Server and in the Application Virtualization database. When the Application Virtualization Management Server service starts, it tries to connect to the path that is configured in the registry. If the Application Virtualization Server service cannot connect, it tries to connect to the path that is configured in the Application Virtualization database. If the Application Virtualization Server service cannot connect again, the service does not start.
 
By default, the Application Virtualization Server logon account is the NETWORK SERVICE account. The Application Virtualization Server logon account requires the Read permission to the content directory. If the path of the content directory is a Universal Naming Convention (UNC) path, the Application Virtualization Server logon account requires the Read permission to the share. If the Application Virtualization Server logon account does not have the appropriate permissions, the service does not start.

To make sure that the Application Virtualization Server logon account has the appropriate permissions to the content directory, follow these steps:

Determine the Application Virtualization Management Server logon account.  To do this, follow these steps:

  1. In Control Panel, open Administrative Tools, and then start Services.
  2. Right-click Application Virtualization Server, and then click Properties.
  3. Click the Log On tab.
  4. If This Account is selected under Log On As, note the account that is specified in This Account box (default is NETWORK SERVICES).  If Local System account is selected under Log On As, and the Application Virtualization Server logon account is the the Local System (SYSTEM) account.
  5. If the content direcoty is a UNC path, use the Application Virtualization Server local computer account when you grant permissions.
  6. Exit Services

Make sure that the Application Virtualization Server logon account has the Read permission to the content directory. To do this, follow these steps:

  1. Start Microsoft Windows Explorer.
  2. Locate the content directory.
  3. Righ-Click the content folder, and then click Properties.
  4. Click the Security tab.
  5. Make sure that the account that you determined in step 1 has the Read permission.  If the account does have Read permissions, click to select the Allow check box.
  6. Click OK, and then exit Windows Explorer.
  7. Make sure that the account that you determined in step 1 has the Read permission. If the account does not have the Read permission, click to select the Allow check box.
  8. Click OK, and then exit Windows Explorer.
If the path of the content directory is a UNC path, make sure that the Application Virtualization Server logon account has the Read permission to the share. To do this, follow these steps:

 

  • Start Microsoft Windows Explorer.
  • Locate the content directory.
  • Righ-Click the content folder, and then click Properties.
  • Click the Sharing tab.
  • Make sure that the account that you determined in step 1 has the Read permission to the share.  If the account does not have the Read permission, click Permissions, and then click to select the Allow check box for the Read permission.
  • Click OK, and then exit Windows Explorer.

    Element properties:

    TargetMicrosoft.AppVirtualization.Server.45.VirtualApplicationServer
    Parent MonitorMicrosoft.AppVirtualization.Server.45.ContentDataAccess_HWS.HealthState
    CategoryEventCollection
    EnabledTrue
    Alert GenerateTrue
    Alert SeverityMatchMonitorHealth
    Alert PriorityNormal
    Alert Auto ResolveTrue
    Monitor TypeMicrosoft.Windows.2SingleEventLogManualReset3StateMonitorType
    RemotableTrue
    AccessibilityPublic
    Alert Message
    Content Data Access - Fix location of the Content Directory - Application
    {0}
    RunAsDefault

    Source Code:

    <UnitMonitor ID="Microsoft.AppVirtualization.Server.45.VirtualApplicationServer.ContentDataAccess_FixlocationoftheContentDirectory_Application" Accessibility="Public" Target="Microsoft.AppVirtualization.Server.45.VirtualApplicationServer" TypeID="Windows!Microsoft.Windows.2SingleEventLogManualReset3StateMonitorType" ParentMonitorID="Microsoft.AppVirtualization.Server.45.ContentDataAccess_HWS.HealthState">
    <Category>EventCollection</Category>
    <AlertSettings AlertMessage="Microsoft.AppVirtualization.Server.45.VirtualApplicationServer.ContentDataAccess_FixlocationoftheContentDirectory_Application.Alert">
    <AlertOnState>Warning</AlertOnState>
    <AutoResolve>true</AutoResolve>
    <AlertPriority>Normal</AlertPriority>
    <AlertSeverity>MatchMonitorHealth</AlertSeverity>
    <AlertParameters>
    <AlertParameter1>$Data/Context/EventDescription$</AlertParameter1>
    </AlertParameters>
    </AlertSettings>
    <OperationalStates>
    <OperationalState ID="Yellow" HealthState="Warning" MonitorTypeStateID="FirstEventRaised"/>
    <OperationalState ID="Red" HealthState="Error" MonitorTypeStateID="SecondEventRaised"/>
    <OperationalState ID="Green" HealthState="Success" MonitorTypeStateID="ManualResetEventRaised"/>
    </OperationalStates>
    <Configuration>
    <FirstComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</FirstComputerName>
    <FirstLogName>Application</FirstLogName>
    <FirstExpression>
    <And>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="String">PublisherName</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="String">Application Virtualization Server</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <Or>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">41520</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">41561</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">41584</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">42001</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">42002</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </Or>
    </Expression>
    </And>
    </FirstExpression>
    <SecondComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</SecondComputerName>
    <SecondLogName>Application</SecondLogName>
    <SecondExpression>
    <And>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="String">PublisherName</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="String">Application Virtualization Server</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <Or>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">41508</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="UnsignedInteger">41523</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </Or>
    </Expression>
    </And>
    </SecondExpression>
    </Configuration>
    </UnitMonitor>