[{"data":1,"prerenderedAt":1661},["ShallowReactive",2],{"blog-\u002Fblog\u002Funderstanding-package-identity-packaged-or-unpackaged-process":3,"surroundBlogs":7,"content-query-GQWW1vW3ZU":12,"content-query-WZfvBznF07":413},{"title":4,"description":5,"image":6},"Understanding Package Identity: Is Your Process Packaged or Unpackaged?","Package identity changes how Windows treats a process. Detecting it early prevents bad assumptions in packaged and unpackaged app flows.","\u002Fimages\u002Fblog\u002F2025-2026\u002Fpackage-identity-process-context.jpg",[8,11],{"_path":9,"title":10},"\u002Fblog\u002Fthe-cloud-exit-paradox-why-the-best-plan-is-the-one-you-never-use","The Cloud Exit Paradox: Why the Best Plan Is the One You Never Use",null,{"_path":13,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":4,"description":5,"date":17,"categories":18,"tags":22,"image":6,"author":16,"body":27,"_type":407,"_id":408,"_source":409,"_file":410,"_stem":411,"_extension":412},"\u002Fblog\u002Funderstanding-package-identity-packaged-or-unpackaged-process","blog",false,"","2026-05-13",[19,20,21],"euc-enduser-computing","microsoft","application-management",[23,24,25,26],"package-identity","msix","windows","application-packaging",{"type":28,"children":29,"toc":396},"root",[30,39,45,50,57,62,67,72,78,83,88,93,98,104,109,123,135,140,172,177,183,217,223,235,241,247,252,265,270,275,294,299,305,310,315,320,325,331],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":31,"tag":36,"props":37,"children":38},"img",{"alt":16,"src":6},[],{"type":31,"tag":32,"props":40,"children":41},{},[42],{"type":43,"value":44},"text","Determining whether a process is running with package identity is a fundamental requirement for modern Windows development, yet it is still a detail that gets missed during early architecture work. Once package identity enters the picture, the operating system changes how certain features, activation paths, and app-data patterns behave.",{"type":31,"tag":32,"props":46,"children":47},{},[48],{"type":43,"value":49},"In a recent technical deep dive, Howard Kapustein, a Principal Software Engineer at Microsoft, outlined the canonical ways to identify whether a process is packaged. This post breaks that logic down using the Feynman Technique so the model is easier to reason about.",{"type":31,"tag":51,"props":52,"children":54},"h2",{"id":53},"the-premise-the-challenge-of-identity",[55],{"type":43,"value":56},"The Premise: The challenge of identity",{"type":31,"tag":32,"props":58,"children":59},{},[60],{"type":43,"value":61},"Windows supports both packaged and unpackaged processes. A packaged process carries package identity from its manifest. In practice, that can come from a full MSIX package or from packaging with external location. An unpackaged process does not have that identity.",{"type":31,"tag":32,"props":63,"children":64},{},[65],{"type":43,"value":66},"That distinction matters because several Windows capabilities are gated on package identity at runtime. Notifications, background tasks, share targets, startup tasks, package extensions, and some Windows Runtime APIs depend on it. If your code assumes identity is present when it is not, it can call the wrong APIs, store configuration in the wrong place, or fail only in one deployment model.",{"type":31,"tag":32,"props":68,"children":69},{},[70],{"type":43,"value":71},"There is also an important nuance here. Package identity is not the same thing as running in a strict AppContainer sandbox. Many packaged desktop apps still run as full-trust processes. Identity and isolation are related, but they are not interchangeable.",{"type":31,"tag":51,"props":73,"children":75},{"id":74},"the-analogy-the-airport-security-clearance",[76],{"type":43,"value":77},"The Analogy: The airport security clearance",{"type":31,"tag":32,"props":79,"children":80},{},[81],{"type":43,"value":82},"To understand package identity, think of a process like a person walking through a large international airport.",{"type":31,"tag":32,"props":84,"children":85},{},[86],{"type":43,"value":87},"An unpackaged process is like a visitor who has arrived at the airport but does not have a boarding pass. They can still exist in the building, move through public spaces, and access what is available in the open terminal. But they do not have the verified identity needed to enter the managed parts of the journey.",{"type":31,"tag":32,"props":89,"children":90},{},[91],{"type":43,"value":92},"A packaged process is like a passenger with a confirmed boarding pass and a verified passport. That identity tells the airport exactly who they are and which services are tied to them. Because the passenger can be identified properly, the airport can route them to the right gate, connect them to the right baggage system, and grant access to the services that depend on verified travel status.",{"type":31,"tag":32,"props":94,"children":95},{},[96],{"type":43,"value":97},"If the passenger tries to board without that identity, they are stopped. Similarly, if an application assumes it has package identity when it does not, the process will eventually hit a feature boundary and fail at runtime.",{"type":31,"tag":51,"props":99,"children":101},{"id":100},"the-breakdown-how-the-code-identifies-the-process",[102],{"type":43,"value":103},"The Breakdown: How the code identifies the process",{"type":31,"tag":32,"props":105,"children":106},{},[107],{"type":43,"value":108},"In technical terms, this is a process-level question, not just an application-level one. An application can have multiple processes, and runtime identity needs to be verified in the process that is actually making the call. Some helper or out-of-process components may not present the same runtime context as the main executable.",{"type":31,"tag":32,"props":110,"children":111},{},[112,114,121],{"type":43,"value":113},"The primary Win32 API for checking this is ",{"type":31,"tag":115,"props":116,"children":118},"code",{"className":117},[],[119],{"type":43,"value":120},"GetCurrentPackageFullName",{"type":43,"value":122},".",{"type":31,"tag":32,"props":124,"children":125},{},[126,128,133],{"type":43,"value":127},"The logic depends on a very specific behavior of the function. If you call ",{"type":31,"tag":115,"props":129,"children":131},{"className":130},[],[132],{"type":43,"value":120},{"type":43,"value":134}," with a null buffer, Windows tells you what kind of situation you are in based on the return code.",{"type":31,"tag":32,"props":136,"children":137},{},[138],{"type":43,"value":139},"There are three meaningful outcomes:",{"type":31,"tag":141,"props":142,"children":143},"ol",{},[144,156,167],{"type":31,"tag":145,"props":146,"children":147},"li",{},[148,154],{"type":31,"tag":115,"props":149,"children":151},{"className":150},[],[152],{"type":43,"value":153},"ERROR_INSUFFICIENT_BUFFER",{"type":43,"value":155},": In this detection pattern, this is the success signal. It means Windows recognized package identity for the current process and is telling you that a real buffer would be required to retrieve the package full name.",{"type":31,"tag":145,"props":157,"children":158},{},[159,165],{"type":31,"tag":115,"props":160,"children":162},{"className":161},[],[163],{"type":43,"value":164},"APPMODEL_ERROR_NO_PACKAGE",{"type":43,"value":166},": The process is running without package identity.",{"type":31,"tag":145,"props":168,"children":169},{},[170],{"type":43,"value":171},"Any other return value: A genuine error occurred and should be handled as an actual failure state.",{"type":31,"tag":32,"props":173,"children":174},{},[175],{"type":43,"value":176},"That is why the test looks slightly counterintuitive at first glance. You are deliberately calling the API in a way that produces a known return code so you can infer whether package identity exists.",{"type":31,"tag":51,"props":178,"children":180},{"id":179},"c-implementation",[181],{"type":43,"value":182},"C++ implementation",{"type":31,"tag":32,"props":184,"children":185},{},[186,188,194,196,201,203,208,210,215],{"type":43,"value":187},"The canonical native implementation uses ",{"type":31,"tag":115,"props":189,"children":191},{"className":190},[],[192],{"type":43,"value":193},"appmodel.h",{"type":43,"value":195},", calls ",{"type":31,"tag":115,"props":197,"children":199},{"className":198},[],[200],{"type":43,"value":120},{"type":43,"value":202},", and checks the return code. If the code is ",{"type":31,"tag":115,"props":204,"children":206},{"className":205},[],[207],{"type":43,"value":153},{"type":43,"value":209},", the process has package identity. If it is ",{"type":31,"tag":115,"props":211,"children":213},{"className":212},[],[214],{"type":43,"value":164},{"type":43,"value":216},", it does not.",{"type":31,"tag":51,"props":218,"children":220},{"id":219},"c-implementation-1",[221],{"type":43,"value":222},"C# implementation",{"type":31,"tag":32,"props":224,"children":225},{},[226,228,233],{"type":43,"value":227},"In C#, the principle is the same, but you typically reach the API through P\u002FInvoke. The implementation usually wraps ",{"type":31,"tag":115,"props":229,"children":231},{"className":230},[],[232],{"type":43,"value":120},{"type":43,"value":234}," in a small boolean helper and evaluates the same return codes.",{"type":31,"tag":36,"props":236,"children":240},{"src":237,"alt":238,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fpackage-identity-process-context\u002Farchitecture.svg","Decision flow: GetCurrentPackageFullName with a null buffer yields ERROR_INSUFFICIENT_BUFFER when the process has package identity, or APPMODEL_ERROR_NO_PACKAGE when it does not.","50%",[],{"type":31,"tag":51,"props":242,"children":244},{"id":243},"the-value-why-identity-matters-to-the-architecture",[245],{"type":43,"value":246},"The Value: Why identity matters to the architecture",{"type":31,"tag":32,"props":248,"children":249},{},[250],{"type":43,"value":251},"This is where the technical detail becomes an architectural concern.",{"type":31,"tag":32,"props":253,"children":254},{},[255,257,263],{"type":43,"value":256},"If an application is intended to run with package identity, the system-managed app data store is often the right place for app-specific settings. Microsoft documents ",{"type":31,"tag":115,"props":258,"children":260},{"className":259},[],[261],{"type":43,"value":262},"ApplicationData.LocalSettings",{"type":43,"value":264}," and the broader local app data store as the packaged app model for settings and state that should survive updates. That data is also managed and removed cleanly when the app is uninstalled.",{"type":31,"tag":32,"props":266,"children":267},{},[268],{"type":43,"value":269},"An unpackaged executable does not get those system-managed app data stores. It needs an explicit storage strategy instead, such as direct file I\u002FO, a known configuration path, or another deliberate settings mechanism.",{"type":31,"tag":32,"props":271,"children":272},{},[273],{"type":43,"value":274},"That gives architects and developers a few practical advantages:",{"type":31,"tag":276,"props":277,"children":278},"ul",{},[279,284,289],{"type":31,"tag":145,"props":280,"children":281},{},[282],{"type":43,"value":283},"Hybrid deployment models. One codebase can behave correctly whether it runs with package identity or as a traditional executable.",{"type":31,"tag":145,"props":285,"children":286},{},[287],{"type":43,"value":288},"Graceful degradation. Identity-dependent features can be disabled cleanly instead of failing at runtime.",{"type":31,"tag":145,"props":290,"children":291},{},[292],{"type":43,"value":293},"Better telemetry and diagnostics. You can separate packaging-related defects from general application defects much faster.",{"type":31,"tag":32,"props":295,"children":296},{},[297],{"type":43,"value":298},"Failing to account for identity is one of the easier ways to create an \"it works on my machine\" problem, especially when developers test in an unpackaged debug flow while users run the final packaged deployment.",{"type":31,"tag":51,"props":300,"children":302},{"id":301},"the-check-to-apply",[303],{"type":43,"value":304},"The check to apply",{"type":31,"tag":32,"props":306,"children":307},{},[308],{"type":43,"value":309},"When designing your next Windows application or modernizing an existing one, ask a simple question early:",{"type":31,"tag":32,"props":311,"children":312},{},[313],{"type":43,"value":314},"Does the process verify whether package identity is actually present before it uses identity-dependent features?",{"type":31,"tag":32,"props":316,"children":317},{},[318],{"type":43,"value":319},"If the answer is no, there is a good chance the design is relying on an assumption that only holds in one runtime context.",{"type":31,"tag":32,"props":321,"children":322},{},[323],{"type":43,"value":324},"That is the real value of this check. It is not just defensive coding. It is a small architectural test that keeps deployment reality aligned with application behavior.",{"type":31,"tag":51,"props":326,"children":328},{"id":327},"references",[329],{"type":43,"value":330},"References",{"type":31,"tag":276,"props":332,"children":333},{},[334,346,356,366,376,386],{"type":31,"tag":145,"props":335,"children":336},{},[337],{"type":31,"tag":338,"props":339,"children":343},"a",{"href":340,"rel":341},"https:\u002F\u002Fdevblogs.microsoft.com\u002Finsidemsix\u002Fis-this-a-packaged-process\u002F",[342],"nofollow",[344],{"type":43,"value":345},"Howard Kapustein: Is this a packaged process?",{"type":31,"tag":145,"props":347,"children":348},{},[349],{"type":31,"tag":338,"props":350,"children":353},{"href":351,"rel":352},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fmsix\u002Fdetect-package-identity",[342],[354],{"type":43,"value":355},"Detect package identity and runtime context",{"type":31,"tag":145,"props":357,"children":358},{},[359],{"type":31,"tag":338,"props":360,"children":363},{"href":361,"rel":362},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fwin32\u002Fapi\u002Fappmodel\u002Fnf-appmodel-getcurrentpackagefullname",[342],[364],{"type":43,"value":365},"GetCurrentPackageFullName function",{"type":31,"tag":145,"props":367,"children":368},{},[369],{"type":31,"tag":338,"props":370,"children":373},{"href":371,"rel":372},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fapps\u002Fdesktop\u002Fmodernize\u002Fmodernize-packaged-apps",[342],[374],{"type":43,"value":375},"Features that require package identity",{"type":31,"tag":145,"props":377,"children":378},{},[379],{"type":31,"tag":338,"props":380,"children":383},{"href":381,"rel":382},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fapps\u002Fdevelop\u002Fdata\u002Fstore-and-retrieve-app-data",[342],[384],{"type":43,"value":385},"Store and retrieve settings and other app data",{"type":31,"tag":145,"props":387,"children":388},{},[389],{"type":31,"tag":338,"props":390,"children":393},{"href":391,"rel":392},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fmsix\u002Fdesktop\u002Fdesktop-to-uwp-behind-the-scenes",[342],[394],{"type":43,"value":395},"Understanding how packaged desktop apps run on Windows",{"title":16,"searchDepth":397,"depth":397,"links":398},2,[399,400,401,402,403,404,405,406],{"id":53,"depth":397,"text":56},{"id":74,"depth":397,"text":77},{"id":100,"depth":397,"text":103},{"id":179,"depth":397,"text":182},{"id":219,"depth":397,"text":222},{"id":243,"depth":397,"text":246},{"id":301,"depth":397,"text":304},{"id":327,"depth":397,"text":330},"markdown","content:blog:understanding-package-identity-packaged-or-unpackaged-process.md","content","blog\u002Funderstanding-package-identity-packaged-or-unpackaged-process.md","blog\u002Funderstanding-package-identity-packaged-or-unpackaged-process","md",[414,709,966,1301],{"_path":13,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":4,"description":5,"date":17,"categories":415,"tags":416,"image":6,"author":16,"body":417,"_type":407,"_id":408,"_source":409,"_file":410,"_stem":411,"_extension":412},[19,20,21],[23,24,25,26],{"type":28,"children":418,"toc":699},[419,425,429,433,437,441,445,449,453,457,461,465,469,473,477,487,497,501,526,530,534,562,566,576,579,583,587,597,601,605,620,624,628,632,636,640,644,648],{"type":31,"tag":32,"props":420,"children":421},{},[422],{"type":31,"tag":36,"props":423,"children":424},{"alt":16,"src":6},[],{"type":31,"tag":32,"props":426,"children":427},{},[428],{"type":43,"value":44},{"type":31,"tag":32,"props":430,"children":431},{},[432],{"type":43,"value":49},{"type":31,"tag":51,"props":434,"children":435},{"id":53},[436],{"type":43,"value":56},{"type":31,"tag":32,"props":438,"children":439},{},[440],{"type":43,"value":61},{"type":31,"tag":32,"props":442,"children":443},{},[444],{"type":43,"value":66},{"type":31,"tag":32,"props":446,"children":447},{},[448],{"type":43,"value":71},{"type":31,"tag":51,"props":450,"children":451},{"id":74},[452],{"type":43,"value":77},{"type":31,"tag":32,"props":454,"children":455},{},[456],{"type":43,"value":82},{"type":31,"tag":32,"props":458,"children":459},{},[460],{"type":43,"value":87},{"type":31,"tag":32,"props":462,"children":463},{},[464],{"type":43,"value":92},{"type":31,"tag":32,"props":466,"children":467},{},[468],{"type":43,"value":97},{"type":31,"tag":51,"props":470,"children":471},{"id":100},[472],{"type":43,"value":103},{"type":31,"tag":32,"props":474,"children":475},{},[476],{"type":43,"value":108},{"type":31,"tag":32,"props":478,"children":479},{},[480,481,486],{"type":43,"value":113},{"type":31,"tag":115,"props":482,"children":484},{"className":483},[],[485],{"type":43,"value":120},{"type":43,"value":122},{"type":31,"tag":32,"props":488,"children":489},{},[490,491,496],{"type":43,"value":127},{"type":31,"tag":115,"props":492,"children":494},{"className":493},[],[495],{"type":43,"value":120},{"type":43,"value":134},{"type":31,"tag":32,"props":498,"children":499},{},[500],{"type":43,"value":139},{"type":31,"tag":141,"props":502,"children":503},{},[504,513,522],{"type":31,"tag":145,"props":505,"children":506},{},[507,512],{"type":31,"tag":115,"props":508,"children":510},{"className":509},[],[511],{"type":43,"value":153},{"type":43,"value":155},{"type":31,"tag":145,"props":514,"children":515},{},[516,521],{"type":31,"tag":115,"props":517,"children":519},{"className":518},[],[520],{"type":43,"value":164},{"type":43,"value":166},{"type":31,"tag":145,"props":523,"children":524},{},[525],{"type":43,"value":171},{"type":31,"tag":32,"props":527,"children":528},{},[529],{"type":43,"value":176},{"type":31,"tag":51,"props":531,"children":532},{"id":179},[533],{"type":43,"value":182},{"type":31,"tag":32,"props":535,"children":536},{},[537,538,543,544,549,550,555,556,561],{"type":43,"value":187},{"type":31,"tag":115,"props":539,"children":541},{"className":540},[],[542],{"type":43,"value":193},{"type":43,"value":195},{"type":31,"tag":115,"props":545,"children":547},{"className":546},[],[548],{"type":43,"value":120},{"type":43,"value":202},{"type":31,"tag":115,"props":551,"children":553},{"className":552},[],[554],{"type":43,"value":153},{"type":43,"value":209},{"type":31,"tag":115,"props":557,"children":559},{"className":558},[],[560],{"type":43,"value":164},{"type":43,"value":216},{"type":31,"tag":51,"props":563,"children":564},{"id":219},[565],{"type":43,"value":222},{"type":31,"tag":32,"props":567,"children":568},{},[569,570,575],{"type":43,"value":227},{"type":31,"tag":115,"props":571,"children":573},{"className":572},[],[574],{"type":43,"value":120},{"type":43,"value":234},{"type":31,"tag":36,"props":577,"children":578},{"src":237,"alt":238,"width":239},[],{"type":31,"tag":51,"props":580,"children":581},{"id":243},[582],{"type":43,"value":246},{"type":31,"tag":32,"props":584,"children":585},{},[586],{"type":43,"value":251},{"type":31,"tag":32,"props":588,"children":589},{},[590,591,596],{"type":43,"value":256},{"type":31,"tag":115,"props":592,"children":594},{"className":593},[],[595],{"type":43,"value":262},{"type":43,"value":264},{"type":31,"tag":32,"props":598,"children":599},{},[600],{"type":43,"value":269},{"type":31,"tag":32,"props":602,"children":603},{},[604],{"type":43,"value":274},{"type":31,"tag":276,"props":606,"children":607},{},[608,612,616],{"type":31,"tag":145,"props":609,"children":610},{},[611],{"type":43,"value":283},{"type":31,"tag":145,"props":613,"children":614},{},[615],{"type":43,"value":288},{"type":31,"tag":145,"props":617,"children":618},{},[619],{"type":43,"value":293},{"type":31,"tag":32,"props":621,"children":622},{},[623],{"type":43,"value":298},{"type":31,"tag":51,"props":625,"children":626},{"id":301},[627],{"type":43,"value":304},{"type":31,"tag":32,"props":629,"children":630},{},[631],{"type":43,"value":309},{"type":31,"tag":32,"props":633,"children":634},{},[635],{"type":43,"value":314},{"type":31,"tag":32,"props":637,"children":638},{},[639],{"type":43,"value":319},{"type":31,"tag":32,"props":641,"children":642},{},[643],{"type":43,"value":324},{"type":31,"tag":51,"props":645,"children":646},{"id":327},[647],{"type":43,"value":330},{"type":31,"tag":276,"props":649,"children":650},{},[651,659,667,675,683,691],{"type":31,"tag":145,"props":652,"children":653},{},[654],{"type":31,"tag":338,"props":655,"children":657},{"href":340,"rel":656},[342],[658],{"type":43,"value":345},{"type":31,"tag":145,"props":660,"children":661},{},[662],{"type":31,"tag":338,"props":663,"children":665},{"href":351,"rel":664},[342],[666],{"type":43,"value":355},{"type":31,"tag":145,"props":668,"children":669},{},[670],{"type":31,"tag":338,"props":671,"children":673},{"href":361,"rel":672},[342],[674],{"type":43,"value":365},{"type":31,"tag":145,"props":676,"children":677},{},[678],{"type":31,"tag":338,"props":679,"children":681},{"href":371,"rel":680},[342],[682],{"type":43,"value":375},{"type":31,"tag":145,"props":684,"children":685},{},[686],{"type":31,"tag":338,"props":687,"children":689},{"href":381,"rel":688},[342],[690],{"type":43,"value":385},{"type":31,"tag":145,"props":692,"children":693},{},[694],{"type":31,"tag":338,"props":695,"children":697},{"href":391,"rel":696},[342],[698],{"type":43,"value":395},{"title":16,"searchDepth":397,"depth":397,"links":700},[701,702,703,704,705,706,707,708],{"id":53,"depth":397,"text":56},{"id":74,"depth":397,"text":77},{"id":100,"depth":397,"text":103},{"id":179,"depth":397,"text":182},{"id":219,"depth":397,"text":222},{"id":243,"depth":397,"text":246},{"id":301,"depth":397,"text":304},{"id":327,"depth":397,"text":330},{"_path":9,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":10,"description":710,"date":711,"categories":712,"tags":715,"image":721,"author":16,"body":722,"_type":407,"_id":963,"_source":409,"_file":964,"_stem":965,"_extension":412},"A cloud exit strategy is not a retreat plan. It is the architecture discipline that preserves leverage, resilience, and infrastructure sovereignty.","2026-05-06",[20,713,714],"azure","architecture",[716,717,718,719,720],"hybrid","multicloud","azure-arc","business-continuity","cloud-strategy","\u002Fimages\u002Fblog\u002F2025-2026\u002Fcloud-exit-paradox.jpg",{"type":28,"children":723,"toc":951},[724,730,735,740,746,751,756,761,779,785,790,795,833,838,843,849,854,861,866,872,877,883,888,894,899,904,908],{"type":31,"tag":32,"props":725,"children":726},{},[727],{"type":31,"tag":36,"props":728,"children":729},{"alt":16,"src":721},[],{"type":31,"tag":32,"props":731,"children":732},{},[733],{"type":43,"value":734},"A cloud exit strategy is often misunderstood. Good exit planning is not a sign that you expect failure. It is the governance discipline that proves you still control placement, risk, and commercial leverage in your estate.",{"type":31,"tag":32,"props":736,"children":737},{},[738],{"type":43,"value":739},"In 2026, that matters more because the old all-in cloud narrative has given way to a more selective operating model. Hybrid and multicloud are now practical responses to resilience, data sovereignty, performance, and workload fit rather than ideology.",{"type":31,"tag":51,"props":741,"children":743},{"id":742},"from-cloud-first-to-cloud-smart",[744],{"type":43,"value":745},"From cloud-first to cloud-smart",{"type":31,"tag":32,"props":747,"children":748},{},[749],{"type":43,"value":750},"Microsoft's current hybrid and multicloud guidance is much closer to cloud-smart than cloud-first. The emphasis is on aligning workload placement to business goals, defining a deliberate cloud mix, and using Azure as a unifying management plane where that approach makes sense.",{"type":31,"tag":36,"props":752,"children":755},{"src":753,"alt":754,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fcloud-exit-paradox\u002Fcloud-smart.jpg","Shift from cloud-first to cloud-smart with a focus on infrastructure sovereignty.",[],{"type":31,"tag":32,"props":757,"children":758},{},[759],{"type":43,"value":760},"That shift changes the way exit planning should be discussed:",{"type":31,"tag":276,"props":762,"children":763},{},[764,769,774],{"type":31,"tag":145,"props":765,"children":766},{},[767],{"type":43,"value":768},"An exit plan is not a promise to leave.",{"type":31,"tag":145,"props":770,"children":771},{},[772],{"type":43,"value":773},"An exit plan is a way to preserve optionality.",{"type":31,"tag":145,"props":775,"children":776},{},[777],{"type":43,"value":778},"The real objective is to avoid unmanaged concentration risk and unsupported dependency chains.",{"type":31,"tag":51,"props":780,"children":782},{"id":781},"what-realistic-exit-planning-looks-like",[783],{"type":43,"value":784},"What realistic exit planning looks like",{"type":31,"tag":32,"props":786,"children":787},{},[788],{"type":43,"value":789},"Effective exit planning is narrower and more practical than most board slides suggest. It should focus first on critical services and the threat scenarios that would make a migration, fallback, or transition necessary.",{"type":31,"tag":32,"props":791,"children":792},{},[793],{"type":43,"value":794},"The lifecycle can be treated as a repeating operating discipline:",{"type":31,"tag":141,"props":796,"children":797},{},[798,803,808,813,818,823,828],{"type":31,"tag":145,"props":799,"children":800},{},[801],{"type":43,"value":802},"Planning and analysis.",{"type":31,"tag":145,"props":804,"children":805},{},[806],{"type":43,"value":807},"Risk assessment.",{"type":31,"tag":145,"props":809,"children":810},{},[811],{"type":43,"value":812},"Exit strategy selection.",{"type":31,"tag":145,"props":814,"children":815},{},[816],{"type":43,"value":817},"Future-state definition.",{"type":31,"tag":145,"props":819,"children":820},{},[821],{"type":43,"value":822},"Migration planning.",{"type":31,"tag":145,"props":824,"children":825},{},[826],{"type":43,"value":827},"Testing.",{"type":31,"tag":145,"props":829,"children":830},{},[831],{"type":43,"value":832},"Ongoing update.",{"type":31,"tag":36,"props":834,"children":837},{"src":835,"alt":836,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fcloud-exit-paradox\u002Finfographic.jpg","Seven-step exit planning lifecycle infographic.",[],{"type":31,"tag":32,"props":839,"children":840},{},[841],{"type":43,"value":842},"This is also the correction to the backup-plan narrative. Business continuity, resilience engineering, and exit planning are related, but they are not interchangeable. Resilience reduces the likelihood and impact of disruption. Exit planning addresses the harder scenario where the provider relationship itself becomes the problem.",{"type":31,"tag":51,"props":844,"children":846},{"id":845},"where-the-value-lies-for-architects",[847],{"type":43,"value":848},"Where the value lies for architects",{"type":31,"tag":32,"props":850,"children":851},{},[852],{"type":43,"value":853},"If you want this to be useful in practice, three principles matter.",{"type":31,"tag":855,"props":856,"children":858},"h3",{"id":857},"focus-on-critical-functions",[859],{"type":43,"value":860},"Focus on critical functions",{"type":31,"tag":32,"props":862,"children":863},{},[864],{"type":43,"value":865},"Do not waste time building heavyweight exit plans for everything. Start with the workloads that would materially affect revenue, service delivery, compliance, or customer trust.",{"type":31,"tag":855,"props":867,"children":869},{"id":868},"standardize-the-control-plane",[870],{"type":43,"value":871},"Standardize the control plane",{"type":31,"tag":32,"props":873,"children":874},{},[875],{"type":43,"value":876},"If hybrid is part of your strategy, unify governance, observability, and policy across environments. Azure Arc, Azure landing zones, Azure Monitor, Defender for Cloud, and related services matter here because they reduce the operational friction of governing or relocating workloads outside a single-cloud boundary.",{"type":31,"tag":855,"props":878,"children":880},{"id":879},"price-lock-in-honestly",[881],{"type":43,"value":882},"Price lock-in honestly",{"type":31,"tag":32,"props":884,"children":885},{},[886],{"type":43,"value":887},"The goal is not to ban every proprietary service. The goal is to understand the cost of changing direction before you are forced to change direction. Sometimes a cloud-native service is absolutely worth using. But the recovery path, data handling model, contract terms, and migration dependencies should be documented while the decision is still voluntary.",{"type":31,"tag":51,"props":889,"children":891},{"id":890},"bottom-line",[892],{"type":43,"value":893},"Bottom line",{"type":31,"tag":32,"props":895,"children":896},{},[897],{"type":43,"value":898},"The best cloud exit plan is usually the one you never execute. But if it does not exist, your architecture is carrying hidden business risk whether or not anyone has named it yet.",{"type":31,"tag":32,"props":900,"children":901},{},[902],{"type":43,"value":903},"Cloud-smart organizations do not design only for adoption. They design for continued freedom of movement.",{"type":31,"tag":51,"props":905,"children":906},{"id":327},[907],{"type":43,"value":330},{"type":31,"tag":276,"props":909,"children":910},{},[911,921,931,941],{"type":31,"tag":145,"props":912,"children":913},{},[914],{"type":31,"tag":338,"props":915,"children":918},{"href":916,"rel":917},"https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fcloud-adoption-framework\u002Fscenarios\u002Fhybrid\u002Fstrategy",[342],[919],{"type":43,"value":920},"Unified hybrid and multicloud operations",{"type":31,"tag":145,"props":922,"children":923},{},[924],{"type":31,"tag":338,"props":925,"children":928},{"href":926,"rel":927},"https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fcloud-adoption-framework\u002Fscenarios\u002Fhybrid\u002Fenterprise-scale-landing-zone",[342],[929],{"type":43,"value":930},"Implement hybrid and multicloud adoption with Azure Arc and Azure landing zones",{"type":31,"tag":145,"props":932,"children":933},{},[934],{"type":31,"tag":338,"props":935,"children":938},{"href":936,"rel":937},"https:\u002F\u002Flearn.microsoft.com\u002Fcompliance\u002Fassurance\u002Fassurance-fsi-resilience",[342],[939],{"type":43,"value":940},"Strengthening operational resilience and reducing concentration risk in financial services",{"type":31,"tag":145,"props":942,"children":943},{},[944],{"type":31,"tag":338,"props":945,"children":948},{"href":946,"rel":947},"https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Farchitecture\u002Fguide\u002Ftechnology-choices\u002Fhybrid-considerations",[342],[949],{"type":43,"value":950},"Azure hybrid options",{"title":16,"searchDepth":397,"depth":397,"links":952},[953,954,955,961,962],{"id":742,"depth":397,"text":745},{"id":781,"depth":397,"text":784},{"id":845,"depth":397,"text":848,"children":956},[957,959,960],{"id":857,"depth":958,"text":860},3,{"id":868,"depth":958,"text":871},{"id":879,"depth":958,"text":882},{"id":890,"depth":397,"text":893},{"id":327,"depth":397,"text":330},"content:blog:the-cloud-exit-paradox-why-the-best-plan-is-the-one-you-never-use.md","blog\u002Fthe-cloud-exit-paradox-why-the-best-plan-is-the-one-you-never-use.md","blog\u002Fthe-cloud-exit-paradox-why-the-best-plan-is-the-one-you-never-use",{"_path":967,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":968,"description":969,"date":970,"categories":971,"tags":973,"image":979,"author":16,"body":980,"_type":407,"_id":1298,"_source":409,"_file":1299,"_stem":1300,"_extension":412},"\u002Fblog\u002Fstop-choosing-between-avd-and-windows-365-based-on-licensing","Stop Choosing Between AVD and Windows 365 Based on Licensing","AVD and Windows 365 solve different operating-model problems, so licensing should never be the first decision criterion.","2026-05-05",[19,20,972],"avd",[974,975,976,977,978],"azure-virtual-desktop","windows-365","frontline","cloud-pc","fslogix","\u002Fimages\u002Fblog\u002F2025-2026\u002Favd-vs-windows-365-licensing.jpg",{"type":28,"children":981,"toc":1290},[982,988,993,998,1004,1009,1014,1019,1024,1037,1042,1048,1053,1058,1063,1068,1073,1079,1084,1107,1112,1135,1140,1146,1151,1156,1161,1166,1184,1190,1195,1218,1223,1227],{"type":31,"tag":32,"props":983,"children":984},{},[985],{"type":31,"tag":36,"props":986,"children":987},{"alt":16,"src":979},[],{"type":31,"tag":32,"props":989,"children":990},{},[991],{"type":43,"value":992},"Licensing is rarely the most important factor in a cloud desktop strategy. If you pick Azure Virtual Desktop or Windows 365 only because one appears cheaper on a licensing slide, you usually miss the day-two operating model that will actually determine cost, resiliency, and support effort.",{"type":31,"tag":32,"props":994,"children":995},{},[996],{"type":43,"value":997},"Azure Virtual Desktop and Windows 365 are not interchangeable VDI products. They answer different design questions, and the right choice normally comes from user segmentation, not from a single enterprise standard.",{"type":31,"tag":51,"props":999,"children":1001},{"id":1000},"start-with-the-operating-model",[1002],{"type":43,"value":1003},"Start with the operating model",{"type":31,"tag":32,"props":1005,"children":1006},{},[1007],{"type":43,"value":1008},"Azure Virtual Desktop is a desktop and app virtualization service on Azure. Microsoft runs the service components such as the gateway and broker, but you still manage the session hosts, images, scaling choices, applications, and much of the operational tuning inside your Azure estate.",{"type":31,"tag":32,"props":1010,"children":1011},{},[1012],{"type":43,"value":1013},"Windows 365 is a cloud-based SaaS service that automatically creates Cloud PCs for licensed users through provisioning policies. That shifts more of the operating experience toward policy, provisioning, and endpoint management in Intune rather than classic VDI platform engineering.",{"type":31,"tag":36,"props":1015,"children":1018},{"src":1016,"alt":1017,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Favd-vs-windows-365\u002Fcontrol-plane.jpg","Control-plane comparison between Azure Virtual Desktop and Windows 365.",[],{"type":31,"tag":32,"props":1020,"children":1021},{},[1022],{"type":43,"value":1023},"That is the real architectural divide:",{"type":31,"tag":276,"props":1025,"children":1026},{},[1027,1032],{"type":31,"tag":145,"props":1028,"children":1029},{},[1030],{"type":43,"value":1031},"AVD gives you a flexible platform with deep tuning options.",{"type":31,"tag":145,"props":1033,"children":1034},{},[1035],{"type":43,"value":1036},"Windows 365 gives you a managed Cloud PC service with a more opinionated operating model.",{"type":31,"tag":36,"props":1038,"children":1041},{"src":1039,"alt":1040,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Favd-vs-windows-365\u002Farchitecture.jpg","Architecture diagram comparing Azure Virtual Desktop and Windows 365 operating models.",[],{"type":31,"tag":51,"props":1043,"children":1045},{"id":1044},"the-blast-radius-question-matters-more-than-the-price-sheet",[1046],{"type":43,"value":1047},"The blast radius question matters more than the price sheet",{"type":31,"tag":32,"props":1049,"children":1050},{},[1051],{"type":43,"value":1052},"The most useful design lens is failure boundary.",{"type":31,"tag":32,"props":1054,"children":1055},{},[1056],{"type":43,"value":1057},"In a pooled AVD environment, multiple users share the same session-host estate. If a host becomes unstable, a profile dependency breaks, or an image issue lands badly, the impact can fan out across many users. That model can be efficient, but it requires engineering discipline and good operational hygiene.",{"type":31,"tag":32,"props":1059,"children":1060},{},[1061],{"type":43,"value":1062},"Windows 365 Enterprise changes the failure boundary because each user gets a dedicated Cloud PC. A user issue is more likely to stay at the individual machine boundary rather than immediately becoming a shared-host incident. That does not remove every shared dependency, but it does change the support model materially.",{"type":31,"tag":32,"props":1064,"children":1065},{},[1066],{"type":43,"value":1067},"This is why a pure compute comparison is often misleading. Pooled AVD can be very cost-effective, but some of that efficiency is traded for operational complexity. Windows 365 can look more expensive at the unit level while still being the simpler service to run for many user groups.",{"type":31,"tag":36,"props":1069,"children":1072},{"src":1070,"alt":1071,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Favd-vs-windows-365\u002Finfographic.jpg","Infographic comparing pooled Azure Virtual Desktop blast radius with dedicated Windows 365 Cloud PCs.",[],{"type":31,"tag":51,"props":1074,"children":1076},{"id":1075},"where-each-platform-actually-fits",[1077],{"type":43,"value":1078},"Where each platform actually fits",{"type":31,"tag":32,"props":1080,"children":1081},{},[1082],{"type":43,"value":1083},"AVD is strongest when you need platform flexibility:",{"type":31,"tag":276,"props":1085,"children":1086},{},[1087,1092,1097,1102],{"type":31,"tag":145,"props":1088,"children":1089},{},[1090],{"type":43,"value":1091},"Pooled or personal host pools.",{"type":31,"tag":145,"props":1093,"children":1094},{},[1095],{"type":43,"value":1096},"Full desktops or RemoteApp delivery.",{"type":31,"tag":145,"props":1098,"children":1099},{},[1100],{"type":43,"value":1101},"Multi-session efficiency.",{"type":31,"tag":145,"props":1103,"children":1104},{},[1105],{"type":43,"value":1106},"More direct control over images, VM size, autoscale, and application delivery patterns.",{"type":31,"tag":32,"props":1108,"children":1109},{},[1110],{"type":43,"value":1111},"Windows 365 is strongest when you want a more predictable desktop service model:",{"type":31,"tag":276,"props":1113,"children":1114},{},[1115,1120,1125,1130],{"type":31,"tag":145,"props":1116,"children":1117},{},[1118],{"type":43,"value":1119},"Automated Cloud PC provisioning through Intune-backed policies.",{"type":31,"tag":145,"props":1121,"children":1122},{},[1123],{"type":43,"value":1124},"Fixed monthly per-user licensing for human-operated Cloud PCs.",{"type":31,"tag":145,"props":1126,"children":1127},{},[1128],{"type":43,"value":1129},"A simpler endpoint-style management experience.",{"type":31,"tag":145,"props":1131,"children":1132},{},[1133],{"type":43,"value":1134},"Dedicated desktops for users who need lower operational friction.",{"type":31,"tag":32,"props":1136,"children":1137},{},[1138],{"type":43,"value":1139},"Windows 365 Frontline extends that model for non-concurrent scenarios. In dedicated mode, one license can provision up to three Cloud PCs for non-concurrent use with one active session per license. In shared mode, one license provisions one shared Cloud PC for one concurrent session, with user data deleted when the session ends unless user experience sync is used.",{"type":31,"tag":51,"props":1141,"children":1143},{"id":1142},"most-enterprises-should-segment-not-standardize-blindly",[1144],{"type":43,"value":1145},"Most enterprises should segment, not standardize blindly",{"type":31,"tag":32,"props":1147,"children":1148},{},[1149],{"type":43,"value":1150},"The better pattern is usually to route users by persona.",{"type":31,"tag":32,"props":1152,"children":1153},{},[1154],{"type":43,"value":1155},"Use AVD where concurrency, app density, RemoteApp delivery, or deep platform tuning create meaningful value. Use Windows 365 where dedicated user experience, fixed-cost planning, and lower support tolerance matter more.",{"type":31,"tag":36,"props":1157,"children":1160},{"src":1158,"alt":1159,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Favd-vs-windows-365\u002Fpersona-routing.jpg","Persona routing diagram for choosing Azure Virtual Desktop or Windows 365 by user type.",[],{"type":31,"tag":32,"props":1162,"children":1163},{},[1164],{"type":43,"value":1165},"That means:",{"type":31,"tag":276,"props":1167,"children":1168},{},[1169,1174,1179],{"type":31,"tag":145,"props":1170,"children":1171},{},[1172],{"type":43,"value":1173},"Task and app-centric estates often lean toward AVD.",{"type":31,"tag":145,"props":1175,"children":1176},{},[1177],{"type":43,"value":1178},"Knowledge workers, contractors, and low-tolerance support populations often lean toward Windows 365.",{"type":31,"tag":145,"props":1180,"children":1181},{},[1182],{"type":43,"value":1183},"Shift-based workers can be a strong fit for Windows 365 Frontline when non-concurrent access is realistic.",{"type":31,"tag":51,"props":1185,"children":1187},{"id":1186},"practical-guidance-for-architects",[1188],{"type":43,"value":1189},"Practical guidance for architects",{"type":31,"tag":32,"props":1191,"children":1192},{},[1193],{"type":43,"value":1194},"If you want to choose well, start here:",{"type":31,"tag":141,"props":1196,"children":1197},{},[1198,1203,1208,1213],{"type":31,"tag":145,"props":1199,"children":1200},{},[1201],{"type":43,"value":1202},"Map personas by isolation and persistence needs, not by licensing bundle.",{"type":31,"tag":145,"props":1204,"children":1205},{},[1206],{"type":43,"value":1207},"Measure actual concurrency before assuming pooled density savings.",{"type":31,"tag":145,"props":1209,"children":1210},{},[1211],{"type":43,"value":1212},"Decide how much platform engineering your team can realistically own.",{"type":31,"tag":145,"props":1214,"children":1215},{},[1216],{"type":43,"value":1217},"Standardize images, application packaging, and join patterns so users can move between platforms when needed.",{"type":31,"tag":32,"props":1219,"children":1220},{},[1221],{"type":43,"value":1222},"The goal is not to crown a universal winner. The goal is to pick the operating model that your team can support and your users can tolerate.",{"type":31,"tag":51,"props":1224,"children":1225},{"id":327},[1226],{"type":43,"value":330},{"type":31,"tag":276,"props":1228,"children":1229},{},[1230,1240,1250,1260,1270,1280],{"type":31,"tag":145,"props":1231,"children":1232},{},[1233],{"type":31,"tag":338,"props":1234,"children":1237},{"href":1235,"rel":1236},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fvirtual-desktop\u002Foverview",[342],[1238],{"type":43,"value":1239},"What is Azure Virtual Desktop?",{"type":31,"tag":145,"props":1241,"children":1242},{},[1243],{"type":31,"tag":338,"props":1244,"children":1247},{"href":1245,"rel":1246},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fvirtual-desktop\u002Fterminology#host-pools",[342],[1248],{"type":43,"value":1249},"Azure Virtual Desktop terminology",{"type":31,"tag":145,"props":1251,"children":1252},{},[1253],{"type":31,"tag":338,"props":1254,"children":1257},{"href":1255,"rel":1256},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fvirtual-desktop\u002Ffslogix-profile-containers",[342],[1258],{"type":43,"value":1259},"User profile management for Azure Virtual Desktop with FSLogix profile containers",{"type":31,"tag":145,"props":1261,"children":1262},{},[1263],{"type":31,"tag":338,"props":1264,"children":1267},{"href":1265,"rel":1266},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows-365\u002Foverview",[342],[1268],{"type":43,"value":1269},"What is Windows 365?",{"type":31,"tag":145,"props":1271,"children":1272},{},[1273],{"type":31,"tag":338,"props":1274,"children":1277},{"href":1275,"rel":1276},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows-365\u002Fenterprise\u002Fprovisioning",[342],[1278],{"type":43,"value":1279},"Provisioning overview",{"type":31,"tag":145,"props":1281,"children":1282},{},[1283],{"type":31,"tag":338,"props":1284,"children":1287},{"href":1285,"rel":1286},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows-365\u002Fenterprise\u002Fintroduction-windows-365-frontline",[342],[1288],{"type":43,"value":1289},"What is Windows 365 Frontline?",{"title":16,"searchDepth":397,"depth":397,"links":1291},[1292,1293,1294,1295,1296,1297],{"id":1000,"depth":397,"text":1003},{"id":1044,"depth":397,"text":1047},{"id":1075,"depth":397,"text":1078},{"id":1142,"depth":397,"text":1145},{"id":1186,"depth":397,"text":1189},{"id":327,"depth":397,"text":330},"content:blog:stop-choosing-between-avd-and-windows-365-based-on-licensing.md","blog\u002Fstop-choosing-between-avd-and-windows-365-based-on-licensing.md","blog\u002Fstop-choosing-between-avd-and-windows-365-based-on-licensing",{"_path":1302,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":1303,"description":1304,"date":1305,"categories":1306,"tags":1308,"image":1311,"author":16,"body":1312,"_type":407,"_id":1658,"_source":409,"_file":1659,"_stem":1660,"_extension":412},"\u002Fblog\u002Fai-in-end-user-computing-from-passive-chat-to-active-agency","Engineering the Proactive IT Architect: AI in End-User Computing","AI becomes valuable in EUC when it reduces discovery, packaging, triage, and cost-governance friction under controlled operational boundaries.","2026-05-03",[19,1307,20],"ai",[1307,1309,24,974,1310],"euc","cost-management","\u002Fimages\u002Fblog\u002F2025-2026\u002Fai-in-end-user-computing.jpg",{"type":28,"children":1313,"toc":1649},[1314,1320,1325,1330,1336,1341,1346,1351,1356,1362,1367,1372,1398,1403,1431,1436,1442,1447,1452,1457,1462,1468,1473,1478,1501,1506,1511,1517,1522,1527,1550,1555,1561,1566,1589,1594,1598],{"type":31,"tag":32,"props":1315,"children":1316},{},[1317],{"type":31,"tag":36,"props":1318,"children":1319},{"alt":16,"src":1311},[],{"type":31,"tag":32,"props":1321,"children":1322},{},[1323],{"type":43,"value":1324},"At the recent E2EMVC Capital Agenda AI Masterclass, I focused on a shift that matters for every modern EUC team: the role of the architect is moving from reactive troubleshooting toward proactive engineering.",{"type":31,"tag":32,"props":1326,"children":1327},{},[1328],{"type":43,"value":1329},"That shift is not about replacing engineers with generic AI. It is about using AI in a controlled way to reduce manual discovery, packaging effort, triage noise, and cost-governance drag so architects can spend more time on design decisions that actually change outcomes.",{"type":31,"tag":51,"props":1331,"children":1333},{"id":1332},"what-proactive-ai-in-euc-actually-means",[1334],{"type":43,"value":1335},"What proactive AI in EUC actually means",{"type":31,"tag":32,"props":1337,"children":1338},{},[1339],{"type":43,"value":1340},"The weak version of AI in IT is a chatbot that summarizes documentation and produces one-off snippets. That can be useful, but it does not materially change the operating model.",{"type":31,"tag":32,"props":1342,"children":1343},{},[1344],{"type":43,"value":1345},"The stronger version is workflow-aware assistance that helps teams investigate, plan, and execute bounded tasks with the right context. In EUC, that means using AI to shorten the time between a problem being observed and a defensible action being taken.",{"type":31,"tag":36,"props":1347,"children":1350},{"src":1348,"alt":1349,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fai-in-euc\u002Factive-agency.jpg","Illustration of a proactive IT architect using AI to move from reactive support toward governed execution.",[],{"type":31,"tag":32,"props":1352,"children":1353},{},[1354],{"type":43,"value":1355},"For me, that is the practical definition of active agency in EUC: not uncontrolled autonomy, but systems that can help engineers move through repeatable operational workflows with less manual friction.",{"type":31,"tag":51,"props":1357,"children":1359},{"id":1358},"packaging-and-application-delivery-are-obvious-starting-points",[1360],{"type":43,"value":1361},"Packaging and application delivery are obvious starting points",{"type":31,"tag":32,"props":1363,"children":1364},{},[1365],{"type":43,"value":1366},"Application packaging remains one of the most stubborn bottlenecks in end-user computing because the hard part is often not the final package. The hard part is understanding what the application does, how it installs, what it writes, and which delivery route makes sense.",{"type":31,"tag":32,"props":1368,"children":1369},{},[1370],{"type":43,"value":1371},"Microsoft's packaging model gives a clear foundation for this work:",{"type":31,"tag":276,"props":1373,"children":1374},{},[1375,1388],{"type":31,"tag":145,"props":1376,"children":1377},{},[1378,1380,1386],{"type":43,"value":1379},"The ",{"type":31,"tag":1381,"props":1382,"children":1383},"strong",{},[1384],{"type":43,"value":1385},"MSIX Packaging Tool",{"type":43,"value":1387}," can repackage existing desktop apps to MSIX and supports conversion from installers such as MSI, EXE, ClickOnce, App-V, scripts, and manual installs.",{"type":31,"tag":145,"props":1389,"children":1390},{},[1391,1396],{"type":31,"tag":1381,"props":1392,"children":1393},{},[1394],{"type":43,"value":1395},"App Attach",{"type":43,"value":1397}," in Azure Virtual Desktop dynamically attaches application packages to user sessions so applications do not need to be installed into every base image.",{"type":31,"tag":32,"props":1399,"children":1400},{},[1401],{"type":43,"value":1402},"A sensible AI-assisted packaging workflow looks like this:",{"type":31,"tag":141,"props":1404,"children":1405},{},[1406,1411,1416,1421,1426],{"type":31,"tag":145,"props":1407,"children":1408},{},[1409],{"type":43,"value":1410},"Observe the installer or application footprint.",{"type":31,"tag":145,"props":1412,"children":1413},{},[1414],{"type":43,"value":1415},"Profile dependencies, file writes, services, and user-state assumptions.",{"type":31,"tag":145,"props":1417,"children":1418},{},[1419],{"type":43,"value":1420},"Match the findings to known patterns and likely remediation steps.",{"type":31,"tag":145,"props":1422,"children":1423},{},[1424],{"type":43,"value":1425},"Route the app toward the right outcome, such as MSIX packaging, App Attach delivery, or another managed enterprise path.",{"type":31,"tag":145,"props":1427,"children":1428},{},[1429],{"type":43,"value":1430},"Produce an output that is easier to test, govern, and maintain.",{"type":31,"tag":32,"props":1432,"children":1433},{},[1434],{"type":43,"value":1435},"That is where AI can create immediate value. It reduces the manual discovery burden that usually slows the entire modernization process down.",{"type":31,"tag":51,"props":1437,"children":1439},{"id":1438},"app-attach-is-about-operational-control-not-just-packaging-format",[1440],{"type":43,"value":1441},"App Attach is about operational control, not just packaging format",{"type":31,"tag":32,"props":1443,"children":1444},{},[1445],{"type":43,"value":1446},"One of the more important architectural advantages in Azure Virtual Desktop is that App Attach lets teams separate application delivery from the session host image. Microsoft documents that the same application package can be used across multiple host pools, and that applications can be delivered using RemoteApp or inside a full desktop session.",{"type":31,"tag":32,"props":1448,"children":1449},{},[1450],{"type":43,"value":1451},"That matters because it lets architects reduce image sprawl and manage application rollout more deliberately. Microsoft also supports multiple application package types for App Attach, including MSIX, Appx, and App-V, and documents CimFS, VHDX, and VHD as disk image options for MSIX and Appx images.",{"type":31,"tag":36,"props":1453,"children":1456},{"src":1454,"alt":1455,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fai-in-euc\u002Farchitecture.jpg","Architecture diagram showing proactive EUC operations across packaging, delivery, and governance.",[],{"type":31,"tag":32,"props":1458,"children":1459},{},[1460],{"type":43,"value":1461},"The architectural lesson is straightforward: when packaging intelligence and delivery intelligence are connected, teams can make better decisions earlier and with less rework.",{"type":31,"tag":51,"props":1463,"children":1465},{"id":1464},"cost-governance-also-needs-a-better-operating-model",[1466],{"type":43,"value":1467},"Cost governance also needs a better operating model",{"type":31,"tag":32,"props":1469,"children":1470},{},[1471],{"type":43,"value":1472},"The same principle applies to Azure cost governance. Too many teams still treat cloud costs as a monthly spreadsheet exercise instead of an operational discipline.",{"type":31,"tag":32,"props":1474,"children":1475},{},[1476],{"type":43,"value":1477},"Microsoft Cost Management is built around a more practical loop:",{"type":31,"tag":276,"props":1479,"children":1480},{},[1481,1486,1491,1496],{"type":31,"tag":145,"props":1482,"children":1483},{},[1484],{"type":43,"value":1485},"Analyze cloud costs.",{"type":31,"tag":145,"props":1487,"children":1488},{},[1489],{"type":43,"value":1490},"Monitor with budgets.",{"type":31,"tag":145,"props":1492,"children":1493},{},[1494],{"type":43,"value":1495},"Optimize with recommendations.",{"type":31,"tag":145,"props":1497,"children":1498},{},[1499],{"type":43,"value":1500},"Keep billing visibility tied to operational decisions.",{"type":31,"tag":36,"props":1502,"children":1505},{"src":1503,"alt":1504,"width":239},"\u002Fimages\u002Fblog\u002F2025-2026\u002Fai-in-euc\u002Fcompliance.jpg","Illustration of governed operations covering compliance, cost visibility, and architectural control.",[],{"type":31,"tag":32,"props":1507,"children":1508},{},[1509],{"type":43,"value":1510},"For EUC architects, this matters when evaluating delivery models and user patterns. For example, Windows 365 Frontline can reduce costs for the right workforce pattern, but only when it is matched correctly to how people actually work. Microsoft documents that Frontline dedicated mode allows one license to provision up to three non-concurrent Cloud PCs with one active session, while shared mode provides one shared non-concurrent Cloud PC per license. Those are useful levers, but only when access patterns, persistence needs, and concurrency are understood up front.",{"type":31,"tag":51,"props":1512,"children":1514},{"id":1513},"governance-is-part-of-the-architecture",[1515],{"type":43,"value":1516},"Governance is part of the architecture",{"type":31,"tag":32,"props":1518,"children":1519},{},[1520],{"type":43,"value":1521},"None of this becomes credible without controls.",{"type":31,"tag":32,"props":1523,"children":1524},{},[1525],{"type":43,"value":1526},"If AI is involved in packaging analysis, operational triage, automation, or cost optimization, then the architecture also needs answers for:",{"type":31,"tag":276,"props":1528,"children":1529},{},[1530,1535,1540,1545],{"type":31,"tag":145,"props":1531,"children":1532},{},[1533],{"type":43,"value":1534},"What data is being used?",{"type":31,"tag":145,"props":1536,"children":1537},{},[1538],{"type":43,"value":1539},"What actions can run automatically?",{"type":31,"tag":145,"props":1541,"children":1542},{},[1543],{"type":43,"value":1544},"What evidence is retained for change control and audit?",{"type":31,"tag":145,"props":1546,"children":1547},{},[1548],{"type":43,"value":1549},"Where are the approval boundaries?",{"type":31,"tag":32,"props":1551,"children":1552},{},[1553],{"type":43,"value":1554},"This is why I see the future EUC architect as proactive rather than merely reactive. The job is no longer just troubleshooting issues after they occur. It is designing a system where discovery, packaging, delivery, governance, and cost control work together with less manual drag.",{"type":31,"tag":51,"props":1556,"children":1558},{"id":1557},"practical-guidance",[1559],{"type":43,"value":1560},"Practical guidance",{"type":31,"tag":32,"props":1562,"children":1563},{},[1564],{"type":43,"value":1565},"If you want AI to help rather than distract, start with the parts of EUC that are expensive in human time:",{"type":31,"tag":141,"props":1567,"children":1568},{},[1569,1574,1579,1584],{"type":31,"tag":145,"props":1570,"children":1571},{},[1572],{"type":43,"value":1573},"Automate discovery-heavy work before automating high-impact production changes.",{"type":31,"tag":145,"props":1575,"children":1576},{},[1577],{"type":43,"value":1578},"Focus on packaging analysis, environment profiling, and repeatable runbooks first.",{"type":31,"tag":145,"props":1580,"children":1581},{},[1582],{"type":43,"value":1583},"Use Microsoft-native controls for packaging, app delivery, and cost governance as the operational baseline.",{"type":31,"tag":145,"props":1585,"children":1586},{},[1587],{"type":43,"value":1588},"Keep engineers accountable for approval and architecture decisions.",{"type":31,"tag":32,"props":1590,"children":1591},{},[1592],{"type":43,"value":1593},"The real objective is not to add another assistant to the stack. It is to engineer a more proactive operating model for EUC.",{"type":31,"tag":51,"props":1595,"children":1596},{"id":327},[1597],{"type":43,"value":330},{"type":31,"tag":276,"props":1599,"children":1600},{},[1601,1611,1621,1631,1641],{"type":31,"tag":145,"props":1602,"children":1603},{},[1604],{"type":31,"tag":338,"props":1605,"children":1608},{"href":1606,"rel":1607},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fmsix\u002Fpackaging-tool\u002Ftool-overview",[342],[1609],{"type":43,"value":1610},"MSIX Packaging Tool overview",{"type":31,"tag":145,"props":1612,"children":1613},{},[1614],{"type":31,"tag":338,"props":1615,"children":1618},{"href":1616,"rel":1617},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fmsix\u002Fpackaging-tool\u002Fcreate-app-package",[342],[1619],{"type":43,"value":1620},"Create an MSIX package from any desktop installer",{"type":31,"tag":145,"props":1622,"children":1623},{},[1624],{"type":31,"tag":338,"props":1625,"children":1628},{"href":1626,"rel":1627},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fvirtual-desktop\u002Fapp-attach-overview",[342],[1629],{"type":43,"value":1630},"App Attach in Azure Virtual Desktop",{"type":31,"tag":145,"props":1632,"children":1633},{},[1634],{"type":31,"tag":338,"props":1635,"children":1638},{"href":1636,"rel":1637},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fcloud-adoption-framework\u002Fready\u002Fazure-setup-guide\u002Fmanage-costs",[342],[1639],{"type":43,"value":1640},"Manage costs and billing for your Azure resources",{"type":31,"tag":145,"props":1642,"children":1643},{},[1644],{"type":31,"tag":338,"props":1645,"children":1647},{"href":1285,"rel":1646},[342],[1648],{"type":43,"value":1289},{"title":16,"searchDepth":397,"depth":397,"links":1650},[1651,1652,1653,1654,1655,1656,1657],{"id":1332,"depth":397,"text":1335},{"id":1358,"depth":397,"text":1361},{"id":1438,"depth":397,"text":1441},{"id":1464,"depth":397,"text":1467},{"id":1513,"depth":397,"text":1516},{"id":1557,"depth":397,"text":1560},{"id":327,"depth":397,"text":330},"content:blog:ai-in-end-user-computing-from-passive-chat-to-active-agency.md","blog\u002Fai-in-end-user-computing-from-passive-chat-to-active-agency.md","blog\u002Fai-in-end-user-computing-from-passive-chat-to-active-agency",1778631077204]