現象
新しい Teams を有効にするとクラシック Microsoft Teamsで切り替えると、新しい Teams アプリは起動しません。 代わりに、バナーが表示され、次のエラー メッセージが表示されます。
問題が発生しました。
クラシック Teams のログ ファイルを確認すると、次のエラー エントリがログに記録されます。
message: Launch api returns false, code: 11, apiCode: undefined, extendedErrorCode: 0, launchStatus: failed, status: failure, scenario: <scenarioGUID>, scenarioName: launch_pear_app, name: launch_pear_app
原因
この問題は、次のいずれかの理由で発生する可能性があります。
- Cookies および Cache シェル フォルダーは再解析ポイントを指します。
- TEMP または TMP 環境変数は再解析ポイントを指します。
- AppData フォルダー内の特定のフォルダーにアクセスするための Read アクセス許可がありません。
- AppData フォルダー内の一部のフォルダーは、再解析ポイントとして機能するように変更されます。
- AppData フォルダーには、必要なシステム フォルダーと同じ名前の無効なファイルが含まれています。
- SYSTEM アカウントと Administrators グループには、AppData フォルダー内の特定のフォルダーに対する Full control 権限がありません。
- Teams のインストール場所に対する SYSAPPID アクセス許可がありません。
- AllowAllTrustedApps ポリシー設定により、新しい Teams が開始されなくなります。
解決方法
この問題の適切な解決策を適用するには、複数のチェックを実行して問題の原因を特定する必要があります。 必要なすべての診断チェックを実行するには、2 つのオプションがあります。 必要なオプションを使用します。
オプション 1: スクリプトを実行する
TeamsLaunchCheck.ps1 PowerShell スクリプトは、実行する必要があるすべてのチェックを自動化します。
TeamsLaunchCheck.ps1 スクリプト
# $erroractionpreference="stop"
$list = @(
"$env:APPDATA",
"$env:APPDATA\Microsoft",
"$env:APPDATA\Microsoft\Crypto",
"$env:APPDATA\Microsoft\Internet Explorer",
"$env:APPDATA\Microsoft\Internet Explorer\UserData",
"$env:APPDATA\Microsoft\Internet Explorer\UserData\Low",
"$env:APPDATA\Microsoft\Spelling",
"$env:APPDATA\Microsoft\SystemCertificates",
"$env:APPDATA\Microsoft\Windows",
"$env:APPDATA\Microsoft\Windows\Libraries",
"$env:APPDATA\Microsoft\Windows\Recent",
"$env:LOCALAPPDATA",
"$env:LOCALAPPDATA\Microsoft",
"$env:LOCALAPPDATA\Microsoft\Windows",
"$env:LOCALAPPDATA\Microsoft\Windows\Explorer",
"$env:LOCALAPPDATA\Microsoft\Windows\History",
"$env:LOCALAPPDATA\Microsoft\Windows\History\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\History\Low\History.IE5",
"$env:LOCALAPPDATA\Microsoft\Windows\IECompatCache",
"$env:LOCALAPPDATA\Microsoft\Windows\IECompatCache\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\IECompatUaCache",
"$env:LOCALAPPDATA\Microsoft\Windows\IECompatUaCache\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCache",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies\DNTException",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies\DNTException\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies\PrivacIE",
"$env:LOCALAPPDATA\Microsoft\Windows\INetCookies\PrivacIE\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\PPBCompatCache",
"$env:LOCALAPPDATA\Microsoft\Windows\PPBCompatCache\Low",
"$env:LOCALAPPDATA\Microsoft\Windows\PPBCompatUaCache",
"$env:LOCALAPPDATA\Microsoft\Windows\PPBCompatUaCache\Low",
"$env:LOCALAPPDATA\Microsoft\WindowsApps",
"$env:LOCALAPPDATA\Packages",
"$env:LOCALAPPDATA\Publishers",
"$env:LOCALAPPDATA\Publishers\8wekyb3d8bbwe",
"$env:LOCALAPPDATA\Temp",
"$env:USERPROFILE\AppData\LocalLow",
"$env:USERPROFILE\AppData\LocalLow\Microsoft",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer\EdpDomStore",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer\EmieSiteList",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer\EmieUserList",
"$env:USERPROFILE\AppData\LocalLow\Microsoft\Internet Explorer\IEFlipAheadCache"
)
$ver = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\'
$script:osVersion = $ver.DisplayVersion
if($script:osVersion -eq "") {
$script:osVersion = $ver.ReleaseId
}
$script:osBuild = (Get-WmiObject -Class Win32_OperatingSystem).Version
$script:osUBR= [int]$ver.UBR
$script:osFullBuild = [version]"$script:osBuild.$script:osUBR"
$script:osProductName = $ver.ProductName
function ValidateShellFolders
{
$shellFolders = @(
"Cookies",
"Cache"
)
$shellPaths = @{}
$path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
$keys = Get-Item $path
$props = Get-ItemProperty $path
($keys).Property | %{
$shellPaths[$_] = $props."$_"
$str = $props."$_"
$str += "`t: " + $_
echo $str
}
foreach($shellFolder in $shellFolders)
{
$shellPath = $shellPaths[$shellFolder]
if(PathContainsReparsePoint($shellPath))
{
Write-Warning "$($shellFolder) User Shell Folder path $shellPath contains a reparse point."
}
else
{
Write-Host "$($shellFolder) User Shell Folder path $shellPath is not a reparse point" -ForegroundColor Green
}
}
}
function ValidateEnvironmentVars
{
$temps = (gci env:* | ?{@("TEMP", "TMP").Contains($_.Name)})
foreach($temp in $temps)
{
if(PathContainsReparsePoint($temp.Value))
{
Write-Warning "$($temp.Name): $($temp.Value) contains a reparse point."
}
else
{
Write-Host "$($temp.Name): $($temp.Value) is not a reparse point" -ForegroundColor Green
}
}
}
function ValidateUserAccess($list)
{
$checked = @()
foreach ($path in $list)
{
$left = $path
for($i=0;$i -lt 10; $i++)
{
if ([string]::IsNullOrEmpty($left))
{
break;
}
if(-Not $checked.Contains($left))
{
try
{
if (Test-Path -Path $left)
{
$items = Get-ChildItem $left -ErrorAction SilentlyContinue -ErrorVariable GCIErrors
if($GCIErrors.Count -eq 0)
{
Write-Host "User is able to access $left" -ForegroundColor Green
}
else
{
Write-Warning "$left is missing permissions for the current user."
}
$checked += $left
}
else
{
Write-Host "MISSING: $path" -ForegroundColor Green
}
}
catch
{
Write-Warning "Error trying to access $left."
}
}
$left=Split-Path $left
}
}
}
function ValidatePaths($list)
{
foreach ($path in $list)
{
if (Test-Path -Path $path)
{
if (Test-Path -Path $path -PathType Container)
{
Write-Host "Folder: $path" -ForegroundColor Green
}
else
{
Write-Warning "FILE: $path"
}
}
else
{
Write-Host "MISSING: $path" -ForegroundColor Green
}
}
}
function ValidateSystemPerms($list)
{
foreach ($path in $list)
{
if (Test-Path -Path $path)
{
$systemPerms = (Get-Acl $path).Access | where {$_.IdentityReference -eq "NT AUTHORITY\SYSTEM"}
$systemFullControl = $systemPerms | where {$_.FileSystemRights -eq "FullControl" -and $_.AccessControlType -eq "Allow"}
if($systemFullControl.Count -ge 1)
{
Write-Host "$path has the correct permissions assigned for SYSTEM account" -ForegroundColor Green
}
else
{
Write-Warning "$path is missing permissions for the SYSTEM account. The current permissions:"
$systemPerms
}
$adminPerms = (Get-Acl $path).Access | where {$_.IdentityReference -eq "BUILTIN\Administrators"}
$adminFullControl = $adminPerms | where {$_.FileSystemRights -eq "FullControl" -and $_.AccessControlType -eq "Allow"}
if($adminFullControl.Count -ge 1)
{
Write-Host "$path has the correct permissions assigned for Administrators group" -ForegroundColor Green
}
else
{
Write-Warning "$path is missing permissions for the Administrators group. The current permissions:"
$adminPerms
}
}
else
{
Write-Host "MISSING: $path" -ForegroundColor Green
}
}
}
function ValidateSysAppIdPerms
{
$apps = Get-AppxPackage MSTeams
foreach($app in $apps)
{
$perms = (Get-Acl $app.InstallLocation).sddl -split "\(" | ?{$_ -match "WIN:/\/\SYSAPPID"}
if($perms.Length -gt 0)
{
Write-Host "$($app.InstallLocation) has the correct SYSAPPID permissions assigned" -ForegroundColor Green
}
else
{
Write-Warning "$($app.InstallLocation) is missing SYSAPPID permissions."
}
}
}
function IsReparsePoint([string]$path)
{
$props = Get-ItemProperty -Path $path -ErrorAction SilentlyContinue
if($props.Attributes -match 'ReparsePoint')
{
return $true
}
return $false
}
function PathContainsReparsePoint($path, $trace = $false)
{
$badPaths = 0
$result = ""
$left = $path
for($i=0;$i -lt 10; $i++)
{
if ([string]::IsNullOrEmpty($left))
{
break;
};
if(IsReparsePoint($left))
{
$result = "Y" + $result
$badPaths++
}
else{
$result = "N" + $result
}
$left=Split-Path $left
}
if($trace)
{
if ($result.Contains("Y"))
{
Write-Warning "$result $path contains a reparse point"
}
else
{
Write-Host "$result $path" -ForegroundColor Green
}
}
return $badPaths -gt 0
}
function ValidateAppXPolicies()
{
$osPatchThresholds = @{
"10.0.19044" = 4046 #Win 10 21H2
"10.0.19045" = 3636 #Win 10 22H2
"10.0.22000" = 2777 #Win 11 21H2
"10.0.22621" = 2506 #Win 11 22H2
}
$minPatchVersion = [version]"10.0.19044"
$maxPatchVersion = [version]"10.0.22621"
if($script:osFullBuild -lt $minPatchVersion)
{
if(-Not (HasAllowAllTrustedAppsKeyEnabled))
{
Write-Warning "AllowAllTrustedApps is not enabled and OS version is too low to get the AllowAllTrustedApps patch."
}
else
{
Write-Host "The OS version is too low to get the AllowAllTrustedApps patch, but AllowAllTrustedApps is a supported value" -ForegroundColor Green
}
}
elseif($script:osFullBuild -le $maxPatchVersion)
{
$targetUBR = $osPatchThresholds[$script:osBuild]
if($script:osUBR -lt $targetUBR)
{
if(-Not (HasAllowAllTrustedAppsKeyEnabled))
{
$recommendedVersion = [version]"$script:osBuild.$targetUBR"
Write-Warning "AllowAllTrustedApps is not enabled and your version of Windows does not contain a required patch to support this.`nEither update your version of Windows to be greater than $recommendedVersion, or enable AllowAllTrustedApps"
}
else
{
Write-Host "OS version is missing the AllowAllTrustedApps patch, but AllowAllTrustedApps is a supported value" -ForegroundColor Green
}
}
else
{
Write-Host "OS version has the AllowAllTrustedApps patch" -ForegroundColor Green
}
}
else
{
Write-Host "OS version is high enough that AllowAllTrustedApps should not be an issue" -ForegroundColor Green
}
}
function HasAllowAllTrustedAppsKeyEnabled
{
$hasKey = $false;
$appXKeys = @("HKLM:\Software\Microsoft\Windows\CurrentVersion\AppModelUnlock", "HKLM:\Software\Policies\Microsoft\Windows\Appx")
foreach ($key in $appXKeys)
{
try
{
$value = Get-ItemPropertyValue -Path $key -Name "AllowAllTrustedApps"
echo "$key AllowAllTrustedApps = $value"
if ($value -ne 0)
{
$hasKey = $true
break;
}
}
catch
{
echo "Missing AllowAllTrustedApps key at $key"
}
}
return $hasKey
}
echo "$script:osProductName Version $script:osVersion, Build $script:osFullBuild"
echo ""
echo "# Checking for reparse points in user shell folders"
ValidateShellFolders
echo ""
echo "# Checking for reparse points in temp/tmp environment variables"
ValidateEnvironmentVars
echo ""
echo "# Checking for user permissions in appdata"
ValidateUserAccess($list)
echo ""
echo "# Checking for reparse points in appdata"
foreach ($path in $list)
{
$result = PathContainsReparsePoint $path $true
}
echo ""
echo "# Checking for unexpected files in appdata"
ValidatePaths($list)
echo ""
echo "# Checking SYSTEM and Administrators permissions in appdata"
ValidateSystemPerms($list)
echo ""
echo "# Checking SYSAPPID permissions"
ValidateSysAppIdPerms
echo ""
echo "# Checking if AllowAllTrustedApps is valid"
ValidateAppXPolicies
Pause
オプション 2: 手動でチェックを実行する
重要
このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護を強化するには、レジストリ 変更する前に レジストリをバックアップします。 その後、問題が起こった場合は、レジストリを復元できます。
Cookies および Cache シェル フォルダーが再解析ポイントである場所を指しているかどうかを確認します。
次の PowerShell コマンドを実行します。
(gp ([environment]::getfolderpath("Cookies"))).Attributes -match 'ReparsePoint' (gp ([environment]::getfolderpath("InternetCache"))).Attributes -match 'ReparsePoint'両方のコマンドが False を返す場合は、手順 2 に進みます。 それ以外の場合は、レジストリ エディターを開き、次のサブキーを見つけます。
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell FoldersTrue として返される PowerShell コマンドのシェル フォルダーの場合は、関連付けられているレジストリ エントリの値を、再解析ポイントではない場所に更新します。 たとえば、値を既定のパスに設定できます。
レジストリエントリ Value Cookie %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookiesキャッシュ %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCacheTEMP または TMP 環境変数の値が再解析ポイントに設定されているかどうかを確認します。
AppData フォルダー内の次のすべてのディレクトリにアクセスするための Read アクセス許可があるかどうかを確認します。
- %USERPROFILE%\AppData\Local
- %USERPROFILE%\AppData\Local\Microsoft
- %USERPROFILE%\AppData\Local\Microsoft\Windows
- %USERPROFILE%\AppData\Local\Microsoft\Windows\Explorer
- %USERPROFILE%\AppData\Local\Microsoft\Windows\History
- %USERPROFILE%\AppData\Local\Microsoft\Windows\History\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\History\Low\History.IE5
- %USERPROFILE%\AppData\Local\Microsoft\Windows\IECompatCache
- %USERPROFILE%\AppData\Local\Microsoft\Windows\IECompatCache\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\IECompatUaCache
- %USERPROFILE%\AppData\Local\Microsoft\Windows\IECompatUaCache\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCache
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies\DNTException
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies\DNTException\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies\PrivacIE
- %USERPROFILE%\AppData\Local\Microsoft\Windows\INetCookies\PrivacIE\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\PPBCompatCache
- %USERPROFILE%\AppData\Local\Microsoft\Windows\PPBCompatCache\Low
- %USERPROFILE%\AppData\Local\Microsoft\Windows\PPBCompatUaCache
- %USERPROFILE%\AppData\Local\Microsoft\Windows\PPBCompatUaCache\Low
- %USERPROFILE%\AppData\Local\Microsoft\WindowsApps
- %USERPROFILE%\AppData\Local\Packages
- %USERPROFILE%\AppData\Local\Packages\VirtualizationTests.Main_8wekyb3d8bbwe\LocalCache
- %USERPROFILE%\AppData\Local\Publishers
- %USERPROFILE%\AppData\Local\Publishers\8wekyb3d8bbwe
- %USERPROFILE%\AppData\Local\Temp
- %USERPROFILE%\AppData\LocalLow
- %USERPROFILE%\AppData\LocalLow\Microsoft
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\EdpDomStore
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\EmieSiteList
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\EmieUserList
- %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\IEFlipAheadCache
- %USERPROFILE%\AppData\Roaming
- %USERPROFILE%\AppData\Roaming\Microsoft
- %USERPROFILE%\AppData\Roaming\Microsoft\Crypto
- %USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer
- %USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\UserData
- %USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\UserData\Low
- %USERPROFILE%\AppData\Roaming\Microsoft\Spelling
- %USERPROFILE%\AppData\Roaming\Microsoft\SystemCertificates
- %USERPROFILE%\AppData\Roaming\Microsoft\Windows
- %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Libraries
- %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent
Test-Path PowerShell コマンドを使用して、このチェックを実行できます。 特定のフォルダーに対する Read アクセス許可がない場合は、フォルダーに対する Full control 権限を持つユーザーに、 Read 権限を付与するように依頼します。
手順 3 で一覧表示されているフォルダーのいずれかが再解析ポイントとして機能するように変更されているかどうかを確認します。 いずれかのフォルダーが再解析ポイントである場合は、Microsoft サポートにお問い合わせください。
AppData フォルダー内の必要なシステム フォルダーと同じ名前のファイルを確認します。 たとえば、パス内の Libraries という名前のファイル ( %AppData%\Microsoft\Windows\Libraries は、同じパスを持つフォルダーと同じ名前を持ちます。 手順 3 に示されているフォルダーごとに、次の PowerShell コマンドを実行します。
Test-Path -Path <directory name, such as $env:USERPROFILE\AppData\Local\Temp> -PathType Leafコマンドが True を返す場合は、ファイルを削除し、システム フォルダーの完全なパスと同じ名前を使用してフォルダーを作成します。
SYSTEM アカウントと Administrators グループに、手順 3. に記載されているすべてのディレクトリに対する Full control アクセス許可があるかどうかを確認します。
各フォルダーに対して次の PowerShell コマンドを実行します。
((Get-Acl (Join-Path $env:USERPROFILE "<directory name that starts with AppData, such as AppData\Local>")).Access | ?{$_.IdentityReference -eq "NT AUTHORITY\SYSTEM" -and $_.FileSystemRights -eq "FullControl"} | measure).Count -eq 1 ((Get-Acl (Join-Path $env:USERPROFILE "<directory name that starts with AppData, such as AppData\Local>")).Access | ?{$_.IdentityReference -eq "BUILTIN\Administrators" -and $_.FileSystemRights -eq "FullControl"} | measure).Count -eq 1いずれかのコマンドが False を返す場合は、フォルダーの Full control アクセス許可を持つユーザーに、対応するアカウントに Full control アクセス許可を付与するように依頼します。
Teams のインストール場所に対する SYSAPPID アクセス許可があるかどうかを確認します。 次の PowerShell コマンドを実行します。
Get-AppxPackage MSTeams | %{$_.InstallLocation+" - "+(((Get-Acl $_.InstallLocation).sddl -split "\(" | ?{$_ -match "WIN:/\/\SYSAPPID"} | Measure).count -eq 1)}コマンドから False が返された場合は、ローカルの Administrators グループのメンバーに、コンピューターでユーザー プロファイルを削除するよう依頼します。 次に、ユーザー アカウントを使用してサインインし、ユーザー プロファイルを再作成します。
AllowAllTrustedApps ポリシー設定を確認します。
コマンド プロンプト ウィンドウで、
winverコマンドを実行します。結果の Windows バージョンとビルド番号を、次のバージョンの Windows 11 および Windows 10 と比較します。
- Windows 11 バージョン 21H2 OS ビルド 22000.2777
- Windows 11 バージョン 22H2 OS ビルド 22621.2506
- Windows 10 バージョン 21H2 OS ビルド 19044.4046
- Windows 10 バージョン 22H2 OS ビルド 19045.3636
Windows のバージョンとビルド番号が一覧のバージョンとビルド番号より前の場合は、レジストリ エディターを開き、次のいずれかのサブキーの下にある AllowAllTrustedApps レジストリ エントリを見つけます。
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlockComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Appx
AllowAllTrustedApps の値を確認します。 値が 0 の場合、ポリシーは無効になります。 ポリシーを有効にするには1 に変更してから、もう一度新しい Teams を開始してください。
注: AllowAllTrustedApps ポリシーを有効にせずに新しい Teams を開始するには、手順 5b に記載されているいずれかのバージョンの Windows を実行している必要があります。
問題が解決しない場合は、システムを Windows 11 バージョン 22H2、OS ビルド 22621.2506 以降のバージョンに更新します。