강좌 / 팁

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

2023.01.01 13:57

zerojiddu 조회:2514 추천: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 - - -
4331 윈 도 우| 강제로 Internet Explorer 열기 스크립트 [8] update 사랑이7 563 12 02-05
4330 윈 도 우| 윈도우11 $OEM$소스 및 WinNTSetup 응용 설치! [29] update 무월 1312 46 02-03
4329 윈 도 우| 윈도우 부팅시 신용카드 정보를 요구할때 넘어가기 [5] 고장난우주 1433 1 02-01
4328 기 타| 볼륨명 찾기 막판 - 종합 쓰임새 중 1 - 주절주절 [1] 코코당 280 5 02-01
4327 기 타| 이동식 하드 디스크 알아야 될때는 ? - 볼륨명 찾기 3 코코당 362 2 01-31
4326 기 타| 이동식 하드 디스크 알아야 될때는 ? - 볼륨명 찾기 2 [1] 코코당 241 2 01-31
4325 기 타| 이동식 디스크 볼륨명을 알아야 될때는 ? - 볼륨명 찾기 1 [1] 코코당 300 2 01-31
4324 윈 도 우| 감춰진 모든 고급 전원옵션 표시하기 [4] zerojiddu 1063 13 01-30
4323 윈 도 우| 특정 폴더 내 임의 파일/폴더 선택 배치 함수 [11] 지후빠 436 14 01-29
4322 윈 도 우| 프로그램 필요없이, 윈도우 설치 USB 만들기 [15] zerojiddu 4398 27 01-18
4321 기 타| CMD BAT 를 UTF8 모드로 사용 [13] 입니다 1301 21 01-16
4320 윈 도 우| 폴더 깊이 제한하여 파일,폴더 찾기 배치 함수 [11] 지후빠 1002 15 01-12
4319 윈 도 우| 배치파일 명령어 > nul 2>&1 해석 [6] 컨피그 844 11 01-11
4318 윈 도 우| BCD 백업 및 복구 프로그램 입니다 [14] 지룡자 2014 39 01-10
4317 하드웨어| Windows 11에서 Realtek 오디오 드라이버를 쉽게 수정하는 ... [6] VᴇɴᴜꜱGɪ 2171 7 01-04
4316 하드웨어| USB 키패드를 매크로 키패드로 사용하기 [7] 지후빠 1272 14 01-02
» 윈 도 우| 삭제할수 없는 시스템 앱, 삭제 방법 [8] zerojiddu 2514 13 01-01
4314 소프트웨어| Wise care 365 사용시 주의점 [6] update heykevin 1974 8 12-30
4313 윈 도 우| 포맷없이 , diskpart 작업 없이 기존 디스크에 EFI 파티션 ... [13] heykevin 2393 19 12-30
4312 윈 도 우| Chromium 기반 브라우저 OS 지원 종료 예정 알림 제거 자동... [8] 녹색조각 1371 14 12-29
XE1.11.6 Layout1.4.8