로드 블록에 도달했을 때 새 Windows 10 설치에서 모든 Universal Apps를 제거하는 과정에있었습니다.
내가 이것을 처음하는 것은 아니며 항상 잘 진행됩니다. 그러나 이번에는 PowerShell
Get-AppxPackage -allusers | Remove-AppxPackage
또는보다 구체적인 내용으로 쓸 때마다
Get-AppxPackage -allusers *windowscalculator* | Remove-AppxPackage
다음 메시지가 표시됩니다.
Remove-AppxPackage : HRESULT : 0x80073CFA로 배포하지 못했습니다. 제거하지 못했습니다. 소프트웨어 공급 업체에 문의하십시오. (HRESULT 예외 : 0x80073CFA) 오류 0x80070032 : AppX 배포 Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe에서 C : \ Program Files \ WindowsApps \ Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe 패키지에서 작업을 제거하지 못했습니다.
이 앱은 Windows의 일부이므로 사용자별로 제거 할 수 없습니다. 관리자는 Windows 기능 설정 또는 해제를 사용하여 컴퓨터에서 앱을 제거 할 수 있습니다. 그러나 앱을 제거하지 못할 수도 있습니다.
참고 : 자세한 내용은 이벤트 로그에서 [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101을 찾거나 명령 줄 Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101을 사용하십시오.
줄 : 1 문자 : 49
+ Get-appxpackage -allusers *windowscalculator* | Remove-AppxPackage
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.Windo...__8wekyb3d8bbwe:String) [Remove-AppxPackage], IOException
+ FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand
내가 제거하려고 시도하는 모든 단일 응용 프로그램에 대해이 메시지가 나타납니다. 이전에는 결코 발생하지 않았던 계산기 또는 이미지 뷰어와 같이 완벽하게 제거 할 수 있습니다.
Powershell이 실행 중이며 다른 모든 기능은 정상적으로 작동합니다.
Windows 재설치 외에 할 수있는 일이 있습니까?
답변
Windows 10 1 주년 업데이트부터 Microsoft 는받은 편지함 앱용 IsInbox
SQLite 데이터베이스 C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
에 새 항목 을 추가했습니다 . 로 표시된 앱 앱을 제거하려고 IsInbox
하면 (으) 로 실패합니다 0x80073CFA
.
그러나 2017 년 4 월 에 발견 된 추악한 해결 방법이 있습니다.
ProcessHacker 및 DBite for SQLite 도구를 다운로드하여 설치해야합니다 .
- ProcessHacker 2를 관리자로 실행하고을 선택한
C:\Windows\System32\svchost.exe
다음 마우스 오른쪽 버튼을 클릭하고Misc
->를 선택하십시오.Run as this user
이제 여기를 선택 C:\Program Files\DB Browser for SQLite\DB Browser for SQLite.exe
하고 시작하십시오. SQLite Browser에서Open database
파일을 열 C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
(그것을보고 모든 파일 열기 대화 상자에서 파일 형식을 변경).
이제 Browse Data
탭을 클릭 하고 테이블을Package
이제 제거하고 열의 하나를 변경하고자하는 응용 프로그램 선택 IsInbox
에 대한 0
변경 사항을 저장합니다.
제거하려는 모든 앱에 대해이 작업을 반복하면 Powersehll 명령이 작동합니다.
그러나 필자는받은 편지함 앱이 제거되면 Microsoft가 최신 Windows 빌드로의 업그레이드를 차단한다고 썼습니다. 따라서 이것을 명심하십시오.
답변
시스템 앱의 클린 후
제거 (바이 패스 오류 0x80073CFA)
에는 다음 PowerShell 스크립트가 포함됩니다.
function Enable-Privilege {
param($Privilege)
$Definition = @'
using System;
using System.Runtime.InteropServices;
public class AdjPriv {
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr rele);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name,
ref long pluid);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid {
public int Count;
public long Luid;
public int Attr;
}
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
public static bool EnablePrivilege(long processHandle, string privilege) {
bool retVal;
TokPriv1Luid tp;
IntPtr hproc = new IntPtr(processHandle);
IntPtr htok = IntPtr.Zero;
retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero,
IntPtr.Zero);
return retVal;
}
}
'@
$ProcessHandle = (Get-Process -id $pid).Handle
$type = Add-Type $definition -PassThru
$type[0]::EnablePrivilege($processHandle, $Privilege)
}
function Take-Over($path) {
$owner = [Security.Principal.NTAccount]'Administrators'
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($path, 'ReadWriteSubTree', 'TakeOwnership')
$acl = $key.GetAccessControl()
$acl.SetOwner($owner)
$key.SetAccessControl($acl)
$acl = $key.getaccesscontrol()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule "Administrators", "FullControl", "ContainerInherit", "None", "Allow"
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
}
do {} until (Enable-Privilege SeTakeOwnershipPrivilege)
function Remove-Package($name) {
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\$name"
Take-Over $key
Remove-Item -Path HKLM:"$key\Owners" -Force -Recurse
& C:\Windows\System32\PkgMgr.exe /up:$name /norestart /quiet
}
#Remove Feedback
$packageBase = "Microsoft-WindowsFeedback"
$packageNames = (dir ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\" + $packageBase + "*")).name
forEach ($package in $packageNames)
{
Remove-Package $package.substring($package.indexOf($packageBase))
}
이 스크립트를 사용할 때 저자는 다음과 같이 말합니다.
$ packageBase를 다른 패키지 이름으로 변경할 수 있습니다.
나는이 스크립트를 직접 시도하지 않았다.
답변
Windows Anniversary 업데이트에서는 몇 가지 사항을 변경하여 cortana 또는 공식적인 방법으로 앱을 제거하는 등의 특정 기능을 해제 할 수 없습니다. xbox 앱 microsoft와 같은 일부 앱은 시스템에서 중요한 앱으로 간주하여이를 제거하는 공식적인 수단을 방해했습니다.
시작 메뉴로 이동하면 마우스 오른쪽 버튼으로 클릭하고 제거를 클릭 할 수 있습니다. 반대로 시작 단추를 마우스 오른쪽 단추로 클릭하고 설정으로 이동 한 다음 앱 및 기능에서 제거 할 수 있습니다.
이제 이러한 앱 제거를 원치 않는 경우. 그것들은 보관되어 있으므로 보관 된 C:\windows\SystemApps
폴더를 찾고 폴더를 제거하거나 더 안전한 옵션은 이름을 바꾸고 밑줄과 같은 문자를 _
이름 끝에 추가하는 것 입니다.
추가하기 만하면 폴더를 제거하거나 systemapps 폴더 내에서 이름을 바꾸면 기술적으로 폴더를 삭제하는 것이 아니라 레지스트리 키 및 기타 파일과 같은 다른 파일을 여전히 설치할 수있는 폴더를 삭제 한 경우 강제로 제거하는 것입니다 systemapps 폴더에 있지만 폴더 이름을 바꾸지 않으면 강제로 실행되지 않습니다.
Ryakna가 아래 의견에서 언급했듯이 이러한 옵션 중 하나를 사용하면 나중에 문제가 발생할 수 있지만 내 경험으로는 아직 업데이트를 포함하여 문제가 발생하지 않았습니다. 그러나 친숙한 경우 powershell을 사용하거나 프로그램 및 기능 옵션 또는 메뉴 옵션을 통해 공식적인 방법으로 제거하는 것이 좋습니다. SystemApps
폴더의 이름을 변경하거나 삭제할 수 없습니다해야이 작업을 수행하는 것처럼, 당신은 당신이 이름을 바꾸거나 systemapps 폴더 안에 폴더를 제거한다면보다 가능성이 가장 높은 발생 문제.