PowerShell을 통해 Universal Apps를 제거 할 수 없음


11

로드 블록에 도달했을 때 새 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 재설치 외에 할 수있는 일이 있습니까?


1
이 게시물의 마지막 항목에서 PowerShell 스크립트를 사용해보십시오. 시스템 앱을 완전히 제거합니다 (오류 0x80073CFA 무시) .
harrymc

대답하십시오.
harrymc

@PIMP_JUICE_IT 그러나 사용자 계정에서 앱을 제거한 후 프로비저닝 된 패키지에서 모든 앱을 다시 설치해야합니다. 나는 처음부터 그것들을 제거 할 수 없었습니다. 그것이 문제입니다.
Ryakna

@Ryakna 내가 인터넷에서 찾은 핵을 확인 했습니까?
magicandre1981

답변:


5

Windows 10 1 주년 업데이트부터 Microsoft 는받은 편지함 앱용 IsInboxSQLite 데이터베이스 C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd에 새 항목 을 추가했습니다 . 로 표시된 앱 앱을 제거하려고 IsInbox하면 (으) 로 실패합니다 0x80073CFA.

그러나 2017 년 4 월발견 된 추악한 해결 방법이 있습니다.

ProcessHackerDBite 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 빌드로의 업그레이드를 차단한다고 썼습니다. 따라서 이것을 명심하십시오.


이 정보에 감사드립니다. 다른 방법으로는 삭제할 수없는 손상된 저장소 응용 프로그램을 수동으로 삭제하는 데 도움이되었습니다 (파워 쉘 포함).
ElDog

이후 Windows 10 빌드에서는 더 이상 작동하지 않는 것 같습니다. 데이터베이스에는 이제 사용자 정의 함수를 실행하는 트리거가 포함되어 있으므로로드 응용 프로그램이 필요한 함수를 설치하지 않으면 모든 업데이트가 실패합니다 ( "오류 : 해당 함수 없음 : workid").
Tim Sylvester

@TimSylvester 어떤 앱을 제거 하시겠습니까? 1903 년에 더 많은받은 편지함 앱을 제거 할 수 있습니다.
magicandre1981

안녕하세요, 나는 이것이 다소 오래되었다는 것을 알고 있지만 랩톱을 업데이트하지 않았 으며이 프로세스를 수행하는 것은 모호하게 익숙해졌습니다. 사실이 작업을 수행했는지 기억할 수 없지만 업데이트 제한 앱을 제거했는지 여부를 결정하는 방법이 있습니까 (다른 시스템에서는)? PDQ 인벤토리를 사용하여 확인할 수있는 방법으로 영향을받는 시스템 목록을 가져와 마지막으로 앱을 다시 설치하면 향후 업그레이드가 재개됩니까? 아니면 최신 버전의 Windows 에서이 바보가 될 수 있습니다. 왜냐하면이 바보 같은 것에 대한 업데이트를 막는 것이 MS의 바보라고 생각하기 때문입니다.
Jon Weinraub

현재 Windows 10 버전 @JonWeinraub 당신은 제거 더받은 편지함 apps.so 당신은 그것을 필요로하지 아니 할 수 있습니다 공식적으로 할 수 있습니다
magicandre1981을

4

시스템 앱의 클린제거 (바이 패스 오류 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를 다른 패키지 이름으로 변경할 수 있습니다.

나는이 스크립트를 직접 시도하지 않았다.


답변 주셔서 감사합니다. 다른 시스템에서 스크립트를 사용해 보았지만 실제로는 거의 모든 범용 응용 프로그램, 심지어는 일반적으로 제거 할 수없는 응용 프로그램에서도 작동하지만 문제가있는 시스템에서는 문제가 지속되고 스크립트가 작동하지 않습니다. Powershell에서 제거하려고하는 모든 앱과 정확히 동일한 오류 메시지가 표시됩니다.
Ryakna

"관리자 권한으로 실행"으로 PowerShell을 호출 할 때이 문제가 계속 발생하면 해당 컴퓨터에 문제가있는 것입니다. Store에 문제가있는 경우 Windows 10에서 Windows Store 및 앱 문제를 해결하기위한 다음 5 가지 팁을 시도 하십시오 .
harrymc

@harrymc 그것은 작동하지 않았다$packageBase = "xboxapp", "officehub", "skypeapp"
JinSnow

2

Windows Anniversary 업데이트에서는 몇 가지 사항을 변경하여 cortana 또는 공식적인 방법으로 앱을 제거하는 등의 특정 기능을 해제 할 수 없습니다. xbox 앱 microsoft와 같은 일부 앱은 시스템에서 중요한 앱으로 간주하여이를 제거하는 공식적인 수단을 방해했습니다.

시작 메뉴로 이동하면 마우스 오른쪽 버튼으로 클릭하고 제거를 클릭 할 수 있습니다. 반대로 시작 단추를 마우스 오른쪽 단추로 클릭하고 설정으로 이동 한 다음 앱 및 기능에서 제거 할 수 있습니다.

이제 이러한 앱 제거를 원치 않는 경우. 그것들은 보관되어 있으므로 보관 된 C:\windows\SystemApps폴더를 찾고 폴더를 제거하거나 더 안전한 옵션은 이름을 바꾸고 밑줄과 같은 문자를 _이름 끝에 추가하는 것 입니다.

추가하기 만하면 폴더를 제거하거나 systemapps 폴더 내에서 이름을 바꾸면 기술적으로 폴더를 삭제하는 것이 아니라 레지스트리 키 및 기타 파일과 같은 다른 파일을 여전히 설치할 수있는 폴더를 삭제 한 경우 강제로 제거하는 것입니다 systemapps 폴더에 있지만 폴더 이름을 바꾸지 않으면 강제로 실행되지 않습니다.

Ryakna가 아래 의견에서 언급했듯이 이러한 옵션 중 하나를 사용하면 나중에 문제가 발생할 수 있지만 내 경험으로는 아직 업데이트를 포함하여 문제가 발생하지 않았습니다. 그러나 친숙한 경우 powershell을 사용하거나 프로그램 및 기능 옵션 또는 메뉴 옵션을 통해 공식적인 방법으로 제거하는 것이 좋습니다. SystemApps폴더의 이름을 변경하거나 삭제할 수 없습니다해야이 작업을 수행하는 것처럼, 당신은 당신이 이름을 바꾸거나 systemapps 폴더 안에 폴더를 제거한다면보다 가능성이 가장 높은 발생 문제.


시간 내 줘서 고마워. 문제는이 Windows 이미지가 11 월부터 만들어졌으며 아직 인터넷에 연결되어 있지 않으므로 업데이트되지 않았다는 것입니다. 또한 방금 동일한 방법으로 최신 Windows 10에서 상점과 계산기를 제거하려고 시도했지만 아무런 문제없이 수행 할 수있었습니다.
Ryakna

@Ryakna 아 좋아, 글쎄, 나는 누군가가 그들을 제거하는 다른 방법을 알고 싶어 경우에 내 대답을 남겨 두겠습니다 lol
Frostalf

SystemApps폴더 이름을 바꿀 수 없습니다 . BleachBit을 사용하여 Xbox 앱 폴더를 제거해야했지만 공식적인 방법으로는 불가능했습니다. Xbox 앱은 여전히 ​​설치되어 있으며 게임 바 프로세스 위치는 ~\Windows\System32입니다. 제거 GameBar*하고 GamePanel*파일을 안전하게 보관할 수 있습니까?
user598527

@ user598527 공식적인 방법 (예 : PowerShell)을 통해 앱을 제거하지 않고 폴더를 제거하거나 이름을 바꾸면 앱이 실제로 제거되지 않으며 나중에 문제가 발생할 수 있습니다. 또한 SystemAppsWindows 10에서 필수이므로 폴더의 이름을 바꾸지 않아야합니다 . 참고 Windows Universal Apps 폴더는 C:\Windows\SystemApps시스템 앱 파일, C:\Program Files\WindowsApps기타 앱 파일 및 C:\Users\Ryakna\AppData\Local\Packages앱 데이터 용입니다.
Ryakna

1
@ user598527 아마도 Xbox AppX가 많이있는 것 중 일부를 제거했지만 기본 Xbox 백본을 제거 할 수 없다고 생각합니다. Get-AppxPackage | Select Name, PackageFullNamePowerShell에서 실행 하면 시스템에 Xbox AppX가 여전히 남아 있음을 알 수 있습니다. Xbox 서비스를 중지하고 비활성화하면 게임 바를 제거 할 수 있다고 생각합니다 (아마도 Xbox Live Networking Service)
Ryakna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.