강좌 / 팁

윈 도 우 삭제할수 없는 시스템 앱, 삭제 방법

2023.01.01 13:57

zerojiddu 조회:3517 추천:13

설정창 앱리스트엔 안나오고

문제는, 개인에 따라 불필요한게 많이 설치돼 있다는 것입니다.

밑의 내용들은

알아내면서 경험한 그대로를 적었습니다.

 

시스템 앱 확인은 파워쉘에서,

get-appxPackage -allusers | select PackageFullName,NonRemovable,SignatureKind,Status

 

NonRemovable True 라 표시된게 제거가 차단된 앱들입니다.

삭제할려면 무조건 에러가 뜨고, 그냥은 제거 불가능입니다.

Screenshot 2022-12-31 203028.png

 

이렇게 제거 안된다는 에러가 뜹니다.

윈도우에선 시스템 앱을 제거하는 기능자체가 없습니다.

Screenshot 2022-12-28 192143.png

 

제거 방법을 찾다 구글링대로 해보면,

제컴 윈11에선 먹히질 않고, 설명이 안된 에러들때문에 한참 헤맸습니다.

 

제거 방법 핵심은,

이폴더에 있는 C:\ProgramData\Microsoft\Windows\AppRepository

StateRepository-Machine.srd (윈도우 앱 데이터베이스 파일) 에 앱마다 저장된

IsInbox 1 값을 0 으로 바꾸면 되는데,

 

(편집하기전, 원래 StateRepository-Machine.srd 는 복사해 백업해 두는게 좋습니다.)

Screenshot 2022-12-30 190156.png

 

그냥은 편집이 불가능하기에,

첫째.

NT Authority\System(TrustedInstaller) 권한으로

StateRepository-Machine.srd 이파일을 편집할수 있어야 돼고,

(제 작성글 중에 설명해 놓은게 있습니다.)

 

둘째.

StateRepository-Machine.srd 파일을 볼수 있고

편집할수 있는 프로그램이 있어야 됩니다.

( 오픈소스 무설치,  DB Browser for SQLite : https://sqlitebrowser.org/dl/ )

 

구체적으로 얘기하면,

 

SYSTEM 권한으로 DB Browser for SQLite 에 StateRepository-Machine.srd 를 열어서

그냥 IsInbox 값을 바꾸면 저런 데이터베이스 에러가 뜹니다. ( 이게 윈10과 윈11이 다른 점이라 합니다. )

윈도우 모든권한과 상관없는 데이터베이스 자체 차단기능 에러로 추측합니다.

Screenshot 2022-12-30 190336.png

 

저 에러를 피하기 위해

Database Structure > Triggers 리스트중,

오른쪽 Schema 명령구문에서 "ON Pacakge" 라 써진 Triggers 리스트를 다 찾아내서,

 

Screenshot 2022-12-31 221110.png

 

윈11 제컴에선 5개 Triggers 리스트에

"ON Package" 라는 표현이 있었습니다.

 

TRG_AFTERINSERT_Package_SRJournal;
TRG_AFTERINSERT_Package_PackageIdentity;

TRIGGER TRG_AFTERUPDATE_Package_SRJournal;
TRIGGER TRG_BEFOREDELETE_Package_SRJournal;
TRIGGER TRG_IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId;

 

이걸 다 삭제하면,

시스템 앱 제거를 차단한 IsInbox 1 값을 0 으로 바꿔도 데이터베이스 에러가 안뜹니다.

(찾은 각 Triggers 리스트 오른쪽 Schema 명령구문을 그대로 복사.저장해놓고 삭제하고

그대로 붙여넣기하면 삭제된 그 Triggers 새로 복구됩니다.)

그리고 다시 제거한 5개 Triggers 리스트를 원상 복구하면 됩니다.

Screenshot 2022-12-30 194024.png

 

5개 Trigger 를 삭제한후,

Browse Data > Package로 들어가면 컴에 설치된

모든 앱들이 나오고

오른쪽에 "IsInbox" 값을 0 으로 바꾸면 됩니다.

Screenshot 2022-12-31 194425.png

 

이과정들을 일일히 클릭하지 않고,

.sql 스크립트를 짜서 저 프로그램에서 바로

File > Import > Database From SQL File 시킬수도 있습니다.

 

밑의 긴 코드는

위 과정을 간편하게 하기위해 .sql 파일로 저장한 스크립트입니다.

한글로 설명을 붙였고, 읽어보면 그렇게 어렵지 않은 내용입니다.

 

/* 먼저 On Package 라 씌어진 Trigger들을 삭제 */

DROP TRIGGER TRG_AFTERINSERT_Package_SRJournal;
DROP TRIGGER TRG_AFTERINSERT_Package_PackageIdentity;
DROP TRIGGER TRG_AFTERUPDATE_Package_SRJournal;
DROP TRIGGER TRG_BEFOREDELETE_Package_SRJournal;
DROP TRIGGER TRG_IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId;

/* 그리고 원하는 윈도우 시스템 앱들의 IsInbox 값을 0으로 바꿈 */

/* UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.AAD.BrokerPlugin_1000.19580.1000.0_neutral_neutral_cw5n1h2txyewy';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.MicrosoftEdgeDevToolsClient_1000.22621.1.0_neutral_neutral_8wekyb3d8bbwe';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.Windows.OOBENetworkCaptivePortal_10.0.21302.1000_neutral__cw5n1h2txyewy';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.Windows.OOBENetworkConnectionFlow_10.0.21302.1000_neutral__cw5n1h2txyewy';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='F46D4000-FD22-4DB4-AC8E-4E1DDDE828FE_10.0.22621.1_neutral_neutral_cw5n1h2txyewy';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.AsyncTextService_10.0.22621.1_neutral__8wekyb3d8bbwe';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.Win32WebViewHost_10.0.22621.1_neutral_neutral_cw5n1h2txyewy';
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Windows.PrintDialog_6.2.2.0_neutral_neutral_cw5n1h2txyewy'; */
UPDATE Package SET IsInbox=0 WHERE PackageFullName='Microsoft.MicrosoftEdge_44.22621.963.0_neutral__8wekyb3d8bbwe';


/* 삭제했던 5개 Trigger들을 다시 생성 (밑의 명령문구는 각 Trigger들 오른쪽 Schema 부분에 표시돼있었던 내용임)*/

CREATE TRIGGER TRG_AFTERINSERT_Package_SRJournal AFTER INSERT ON Package FOR EACH ROW
BEGIN
   INSERT OR IGNORE INTO PackageIdentity (PackageFamily, PackageFullName) VALUES(NEW.PackageFamily, NEW.PackageFullName);UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT workid(), 1, 1, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s CROSS JOIN PackageIdentity AS pi WHERE is_srjournal_enabled()AND s.Id=2 AND pi.PackageFullName=NEW.PackageFullName;
END;

CREATE TRIGGER TRG_AFTERINSERT_Package_PackageIdentity AFTER INSERT ON Package FOR EACH ROW
BEGIN
   INSERT OR IGNORE INTO PackageIdentity (PackageFamily, PackageFullName) VALUES(NEW.PackageFamily, NEW.PackageFullName);
END;

CREATE TRIGGER TRG_AFTERUPDATE_Package_SRJournal AFTER UPDATE ON Package FOR EACH ROW WHEN is_srjournal_enabled()
BEGIN
   UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT workid(), 1, 2, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=NEW.PackageFullName;
END;

CREATE TRIGGER TRG_BEFOREDELETE_Package_SRJournal BEFORE DELETE ON Package FOR EACH ROW WHEN is_srjournal_enabled()
BEGIN
   UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT workid(), 1, 3, OLD._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=OLD.PackageFullName;
END;

CREATE TRIGGER TRG_IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId BEFORE INSERT ON Package FOR EACH ROW
BEGIN
   SELECT CASE WHEN ((SELECT _PackageID FROM Package WHERE PackageFamily=NEW.PackageFamily AND ResourceId IS NEW.ResourceId AND Architecture=NEW.Architecture AND Version=NEW.Version AND _WorkId=NEW._WorkId) IS NOT NULL)THEN RAISE(ABORT, 'INSERT INTO "Package" violates the unique index "IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId"') END;
END;

 

그리고 이젠,

내가 원하는 시스템 앱을 삭제했습니다.

이건 관리자 권한으로 해도 됩니다.

Screenshot 2022-12-31 202222.png

 

2차로 또 다른 시스템 앱도 삭제해봤습니다.

엣지는 하나만 설치돼 있는게 아니고, EdgeDevTools, Edge Stable, Edge 구버전..

4개나 컴에 설치돼 있습니다.

저기 에러는 현재 사용중인 Edge Stable 삭제에러인데, 저건 시스템 앱이 아닙니다.

Screenshot 2023-01-01 100624.png

 

시스템 앱중 *OOBENetwork* 앱들은 관리자 권한에선 삭제가 안되길래,

NT Authority\System 권한으로 띄운 새창에서 해보니

문제없이 삭제가 됐습니다.

Screenshot 2023-01-01 112226.png

 

StateRepository-Machine.srd 앱 데이터베이스 파일 편집때,

이런 에러가 떳지만, 수정한 내용이 정상 반영됐다는 메세지도 같이 있어

무시하고 진행해도 정상적으로 시스텝 앱이 삭제 되었습니다.

Screenshot 2023-01-01 093534.png

 

지금 제컴에 남아있는 윈도우 앱들입니다.

Screenshot 2022-12-31 202417.png

 

 

 

 

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
4480 윈 도 우| PrincePE_V18.5 [164] %카리스마 204984 99 02-02
4479 윈 도 우| 윈도우7 Windows 정품 인증 기술 업데이트로 인증하기 [21] 얼룩강아지 111628 0 02-27
4478 윈 도 우| 비스타(VISTA) 인증 후 무한 리부팅 현상 해결법 [1] gooddew 98131 0 06-17
4477 윈 도 우| 바이오스 안에 OEM SLIC 가 내장되었는지 확인하는 방법 [5] gooddew 84995 0 06-17
4476 윈 도 우| UEFI-모드 부팅 [설치 USB] 만들기 [8] eunnano 77025 0 09-07
4475 A.I 사용법 무작정 따라하기 (스샷 첨부) - 마지막 수정 [67] PoLaRiS 74990 6 09-10
4474 하드웨어| 유튜브 버퍼링 완전해결2 (hosts파일 사용, DNS변경 x, SKB... [44] hsk 63917 6 05-06
4473 윈 도 우| 비스타/세븐 DVD-4cd 분할 가이드 v2 김간지 63412 0 01-21
4472 윈 도 우| Usb를 이용한 XP설치 [21] 고맙쥐 62281 11 10-23
4471 윈 도 우| 비스타의 숨겨진 부팅로고를 보자 [5] cdcsj 60484 0 05-26
4470 윈 도 우| 소소한팁..Windows 로그온 사진이 작을때.. 김간지 59253 0 07-12
4469 윈 도 우| God Mode 만들기 [5] 적광 55432 0 12-26
4468 기 타| Superfetch 기능 사용중단하기 [13] gooddew 55294 1 09-16
4467 윈 도 우| Win7_8 PE/수정/추가/바탕화면/교체하기 [13] 까꾸리 54308 17 05-18
4466 Windows 7 과 XP 프린터와 파일 서로 공유하기 [5] sp2 52848 3 08-22
4465 윈 도 우| 윈도우8 다국어 언어팩 설치 방법(영문 기준) [6] chkid 51182 5 11-11
4464 윈 도 우| 삼성 노트북의 복원솔루션 5 를 이용하여 SSD에 복원영역 ... [13] 울랄라백수 48974 4 06-17
4463 소프트웨어| USB키보드인채로 PLOP 사용하기 (USB 2.0 MODE + PE) [19] hazuki 48384 0 01-19
4462 윈 도 우| 만능고스트 사용후 hal.dll 오류로 부터 벗어나기 [2] cdcsj 47763 0 04-29
XE1.11.6 Layout1.4.8