Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IsSelfContained() #2135

Merged
merged 9 commits into from
Mar 1, 2022
Merged

IsSelfContained() #2135

merged 9 commits into from
Mar 1, 2022

Conversation

DrusTheAxe
Copy link
Member

@DrusTheAxe DrusTheAxe commented Feb 19, 2022

Function for implementation to detect if WinAppSDK is in use via Self-Contained (i.e. if WinAppSDK is deployed via MSIX or Self-Contained).

https://task.ms/37999189

@DrusTheAxe DrusTheAxe added the area-Deployment Issues related to packaging, installation, runtime (e.g., SelfContained, Unpackaged) label Feb 19, 2022
@DrusTheAxe DrusTheAxe added this to the 1.1 milestone Feb 19, 2022
@DrusTheAxe DrusTheAxe self-assigned this Feb 19, 2022
@ghost ghost added the needs-triage label Feb 19, 2022
@DrusTheAxe DrusTheAxe changed the title IsSelfContained IsSelfContained() Feb 19, 2022
@DrusTheAxe
Copy link
Member Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@DrusTheAxe
Copy link
Member Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

test/Common/pch.h Outdated Show resolved Hide resolved
@riverar
Copy link
Contributor

riverar commented Feb 24, 2022

Nit: Commit summaries should be concise and consistent and ~50 characters or less, leaving the other words for subsequent lines.


## What is 'Self-Contained'?

Windows App SDK can be deployed via MSIX or self-contained, aka WinAppSDK/MSIX and WinAppSDK/SelfContained.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Doesn't answer the question -- what is self-contained?

Copy link
Member Author

@DrusTheAxe DrusTheAxe Feb 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Self-Contained" is the phrase for what was formerly referred to as "AppLocal" or "In-App".

In short, Windows App SDK deployed as Self-Contained means "here's the files, add them to your app". No Microsoft.WindowsAppSDK MSIX packages needed for your app to run.

The Self-Contained spec is in-progress at Initial draft of AppLocal Deployment spec. #1202

+@mikebattista

## How to detect if Windows App SDK is deployed Self-Contained?

If necessary, use `Microsoft::WindowsAppSDK::SelfContained::IsSelfContained()` to detect if the
current process is using WindowsAppSDK deployed via SelfContained (vs MSIX).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But you can have an app that's MSIX packaged and self-contained, right? Perhaps drop the parenthetical to avoid having to explain.

Suggested change
current process is using WindowsAppSDK deployed via SelfContained (vs MSIX).
current process is using WindowsAppSDK deployed via SelfContained.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But you can have an app that's MSIX packaged and self-contained, right?

Yes.

There are 2 actors involved -- (1) WinAppSDK bits and (2) an app using WinAppSDK. This IsSelfContained() determines how (1) WinAppSDK is deployed, whether that's via MSIX packages or as files with/in/part-of your app.

That's independent of how (2) an app is deployed. You absolutely can make MyApp.msix using WinAppSDK/SelfContained, in which case MyApp.msix contains MyApp.exe etc AND microsoft.windowsappruntime.dll and other files making up WinAppSDK's runtime.

@mikebattista Terminology seems to be a bit confusing. I look forward to the Self-Contained spec defining the terminology we should use.

@DrusTheAxe
Copy link
Member Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@DrusTheAxe
Copy link
Member Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@DrusTheAxe DrusTheAxe merged commit 42f7c48 into main Mar 1, 2022
@DrusTheAxe DrusTheAxe deleted the user/drustheaxe/isselfcontained branch March 1, 2022 01:29
loneursid added a commit that referenced this pull request Mar 1, 2022
* Enable SBOM generation for WindowsAppSDK (#1979)

* TDBuild - updating localized resource files.

* Update dependencies from https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal build Maestro-UpdateEngCommon_2201.14001 (#1985)

Microsoft.WinAppSDK.EngCommon
 From Version 1.0.0-20220110.0-CI -> To Version 1.0.0-20220114.0-CI

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* TDBuild - updating localized resource files.

* DDLM package names are Microsoft.WinAppRuntime.DDLM.<minor><patch>.<msixminor>.<msixbuild>.<msixrevision>[-shortversiontag]. But we only want to match down to <minor>. The code+spec was wrong to look for <minor>.* needs to be <minor>* (#1995)

* TDBuild - updating localized resource files.

* Add new font selection APIs to DWrite API spec (#1967)

* Add new font selection APIs to DWriteCore API spec.
* Add descriptions of font family models and font selection algorithms.

* AppLifecycle Restart API (#1134)

* Initial restart API branch

* Formatting to code blocks

* Updates to heading

* Removed preamble

* Updates to overview

* Removing resources content

* Updating restart spec with latest changes

* Fixed summary

* Updates to API details, mechanism and sample

* run markdown prettifier

* Updating mechanism

* Updating formatting for consistency

* Updates to return value description

* Updates to spec after latest review

* Prettified to match md guidelines, fixed nits

Co-authored-by: Hamza Usmani <mousma@microsoft.com>

* Initial RequestRestartNow API (#1882)

* Initial API signature

* snap for driving home

* RestartAgent basic build infra

* builds now

* Updates to the calling API and the restartagent.

* switch to using common implementation of IsPackagedProcess()/HasIdentity()

* update

* Initial API signature

* snap for driving home

* RestartAgent basic build infra

* builds now

* Updates to the calling API and the restartagent.

* switch to using common implementation of IsPackagedProcess()/HasIdentity()

* update

* New test passes with API.

* updated comment

* Error handling changes and packaged code paths.

* Removed unused tests, and added new test.

* cleanup

* transport packaging stuff

* typo

* Enable control flow guard for Release only.

* PR feedback

* Add ARM64

* Update to support packaged scenarios.  This needs to be further scoped to only Desktop Bridge apps.

* Detect UWP and redirect.

* Reduce access usage.

* Final API Name updates

* Add MRTCore interface name and id (#1989)

* Correct CsWinRTWindowsMetadata

* WindowsSdkPackageVersion

* Suffix

* suffix only

* 22

* Update

* Update dependencies from https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal build Maestro-UpdateEngCommon_2201.25001 (#2018)

Microsoft.WinAppSDK.EngCommon
 From Version 1.0.0-20220114.0-CI -> To Version 1.1.0-20220125.0-CI

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* Generate cert (#1986)

* Update DevCheck to generate MSTest.pfx/.cer

* Refactor temp handling. Add .user dir

* Change cert handling to use .user\* and direct certificate handler via Powershell's PKI module. Buh-bye all references to MSTest.* and certutil

* Add -Remove-DevTestCert and -Remove-DevTestPfx

* Change all temp\MSTest.pfx to .user\winappsdk.certificate.test.pfx

* Added -CertPasswordFile, -CertPasswordUser, -RemoveAll. Save password as plaintext to .pwd file for later use

* Update makemsix.cmd to pass along the .pwd content needed to use the (now password protected) .pfx

* Update MSTest references

* Start of changing NMAKEfiles to MSBuild

* Add new file

* MakeMsix.targets works! Rewrote DDLM.msix to work it out, when running a specific project (e.g. 'msbuild /bl /p:Configuration=Debug,Platform=x64 /t:Build test\DynamicDependency\data\DynamicDependencyLifetimeManager.Msix\DynamicDependencyLifetimeManager.Msix.vcxproj'). Now to verify it works when building the solution, moving MakeMsix.targets out to root\build and propogating this to the other makemsix projects

* 'msbuild foo.vcxproj' works but 'msbuild bar.sln' fails due to 'C:\source\repos\windowsappsdk\test\DynamicDependency\data\DynamicDependencyLifetimeManager.Msix\DynamicDependencyLifetimeManager.Msix.vcxproj error MSB4057: The target GetProjectInfoForReference does not exist in the project. [C:\source\repos\windowsappsdk\' Seems GetPRojectInfoForReference is referenced by 'C:\ProgramFiles (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets' and Microsoft.Makefile.targets, we don't fit either but they're required to resolve '<ProjectReference...'? Is it possible to move the ProjectReference dependency to the .sln? Or make this work without trying to make a full blown C++ or NMake project? Time to ping some VS/MSBuild experts...

* Tweaked the vcxproj to successfully create .msix via MakeMSIX!

* Moved MakeMSIX.targets to the root (with other build files)

* It works! Got the test projects building with the .pfx and .pwd

* Rewiring test projects to use MakeMsix.targets instead of NMake

* Yet more MakeMsix fixup

* Fixed the package name

* Added dummy Clean command (for now)

* Fixed Deployment's test package where source files get put to different subdir+filename inside the msix

* Fix DevCheck Start-Service to gracefully degrade if not running as admin

* DeploymentTests were missing a build order dependency on BootstrapDLL project

* Updated DevCheck generated cert to have 12-month lifespan (like current one)

* Move Framework.* projects from makemsix.cmd to MakeMSIX.targets

* Delete makemsix.cmd (obsolete)

* Updated test projects to use static manifests instead of generated from a template (unnecessary complexity)

* Deleted obsolete MakeAppxManifestFromTemplate.*

* Removed obsolete manifest/template handling. Removed printfery debugging

* Minor syntax cleanup. Fixed appxmanifest overly aggressive copy/paste human error <sheepish grin>. Fixed publish-header delete-custom-build-step human error

* Fixup Math framework header publishing (due to bad merge due to the age of this change and other work in other branches that hit main. Grrr)

* Deleted obsolete files

* Replaced SolutionDir with RepoRoot

* Rewrote installer's testpackage creation project to use MakeMSIX

* Fixed naming inconsistencies

* Addressed some issues. More to come

* Fixed Get-UserPath emitting New-Item result to the output stream thus when creating the .user directory return $user returned System.Object[] with 2 objects in the stream (filename twice). Well, that was fun

* Fix bad merge

* Added Clean support to MakeMSIX. Cleanup up some internals including dependencies. MakeMsixOutputFilename is no longer optional and inferred; it must be defined by a project before import'ing makemsix.targets

* Optimized load-test-cert-password to a global done once instead of per import rof makemsix.targets

* Updated projects to use the common RepoTestCertificate*

* Removed obsolete and redundant <Error> check

* Added file-existence check before readng file. Added error check at start of project to flag missing-devcheck-artifacts early rather than late

* Test WTH is going on

* Remove debugging printfery. NOTE: Separate Jobs in a pipeline (will? may?) run in parallel on different machines. Until build-mrt.yml is merged into WindowsAppSDK-BuildProject-Steps.yml any common setup (or cleanup) needs to be done in both. Also, it means MRTCore *cannot* use any APIs in WindowsAppRuntime.sln because they're technically peers

* Add DevCheck support to RunTestsInHelix job

* Merge/Port 1.0 license support into main/1.1 (#2012)

* Update installer to support both publishing IDs used in App SDK. (#1759)

* draft changes

* fixing typo

Co-authored-by: Ben Kuhn <benkuhn@ntdev.microsoft.com>

* Added MSIX license support (#1783)

* Update installer to support installing licenses. Structure in place, need to coordinate with build pipeline to implement InstallLicenses (instead of printf)

* Simplified help

* Added missing Copyright. Add valid license for inner-loop testing. Added --dry-run and other command line parameters (to expedite testing as well as product benefit). Wired up install flow. Next is testing the actual get-license-from-stream-and-install

* It works! Verified with stub NOP implementation here for dev inner-loop and full pipeline bits. Improved error reporting.

* Add license support to Deployment API and a new InstallLicenses API (#1790)

* Updated DeploymentManager to install license files if necessary

* Add stubs for the InstallLicenseFile() methods

* Change installer to install licenses BEFORE packages, for higher reliability

* Copy the license header to the source tree to use whehn building via the pipeline]

* Add Licensing API and export from Bootstrap'r

* Added some pseudocode in MsixInstallLicenses(). Real implementation coming RSN

* yml changes to pickup licensing package when needed.

* moving restore to the top of the pipeline.

* moving back, wrong stage

* Fixed license filename

* add nuget authenticate call

* differnt connection

* adding nuget config for build

* avoid using licensing support in github / PR builds, which don't have access to the resources

* update script to capture package version / name.

* one missed check

* Incorported feedback

* udpdating nuget.config name to avoid conflicts.

Co-authored-by: Ben Kuhn <benkuhn@ntdev.microsoft.com>

* Incorporated feedback

Co-authored-by: Ben Kuhn <bjk4929@yahoo.com>
Co-authored-by: Ben Kuhn <benkuhn@ntdev.microsoft.com>

* Update to FrameworkUDK 1.1.0-CI-22541.1000.220124-0934.0 (#2019)

* Exclude CsWinRT.Dependency (#2021)

* Bad merge fix missed copying main_license.xml to the testpackages directory (#2025)

* Feature for sharing security descriptors (take 2) (#2005)

* Initial

* Working tests

* WinRT implementation

* Delay load both DLLS and perform full bootstrap setup. It works!

* PR feedback

* Wrap long lines

* Merge in test package changes

* Reworded a password prompt for clarity (#2035)

* Remove 19h1 and add 21H1 to Helix test queue. (#2038)

* Windows SDK version should match that of other projects (#2043)

Co-authored-by: Eric Langlois <erlangl@microsoft.com>

* Moving Intellisense files to single location (#2028)

* Moving Intellisense files to foundation repo

* Moving Intellisense files into one location

* Moving Intellisense files to internal repo

Co-authored-by: Eric Johnson <ejohn@microsoft.com>

* Reworded a password prompt for clarity (#2045)

* Enable APIscan-friendly build options (#2050)

* DynamicDependencies: support elevation (#2066)

* Changed DynamicDependencies' mechanism to get ApplicationData for non-System definitions. Only use the PackagedCOM object when running in an AppContainer (where hopping to another process is necessary). Elevated (and MediumIL) can directly use ApplicationDataManager (a necessity for Elevation, a nicety for MediumIL)

* New file

* Remove elevated blockers. Fixup to work for elevation. Update elevation test to verify success (as expected) instead of failure (as previously expected)

* Fixup DDLMShadow logging to not fail on timeout (WINDOWSAPPSDK_DDLM_SHUTDOWN and ..._CALLER_TERMINATED).  Previously would crash because WIL faults if LOG_*() called with SUCCEEDED(hr), but this was the last thing in the process before exit so we didn't notice. Should change to alternative logging (Telemetry?) but need to check options before deciding which way to jump. Update will be coming

* Add tests for Elevation

* Add a missing comment

* ignore failures button'

* Revert "ignore failures button'"

This reverts commit ef2c8ad.

* Add button to allow publishing even if there are test failures (#2070)

* Update to FrameworkUDK 1.1.0-CI-22541.1001.220207-1139.1 (#2077)

* Move CSWinRT to Toolset Dependencies in Version.Details.xml (#2084)

* Update dependencies from https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal build Maestro-UpdateEngCommon_2202.10001 (#2092)

Microsoft.WinAppSDK.EngCommon
 From Version 1.1.0-20220125.0-CI -> To Version 1.1.0-20220210.0-CI

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* Adding a non-async PowerNotificiations::EffectivePowerMode method (#2076)

* Added EffectivePowerMode2

* Added EffectivePowerMode2

Co-authored-by: Huzaifa Danish <modanish@microsoft.com>

* Update dependencies from https://github.com/microsoft/CsWinRT build 1.5.0.220207.5 (#2072)

[main] Update dependencies from Microsoft/CsWinRT


 - Merge branch 'main' into darc-main-309a8238-dc1b-428e-92c2-4f38e8ba749a

* Update AppLifecycle StateNotifications.md (#2103)

Add EffectivePowerMode2

* Update to FrameworkUDK 1.1.0-CI-22541.1002.220217-1401.0 (#2141)

* Update MSIX package names' spec to match actual 1.0 behavior (missed updating spec when we updated code for 1.0-stable) (#2104)

* Publish all BuildOutput as a pipeline artifact, to enable running additional tests in the future. (#2149)

* Publish all of the build output as an artifact.

* Use Pipeline artifacts instead.

* Attempt downloading the pipeline BuildOutput artifact in the Helix tests.

* Apparently we can't have multiple pipeline artifacts.

* Fix

* Fix filtering.

* They are reversed.

* Folders inside folders.

* Sigh.

* Comments

* Remove old method.

* Remove debug output.

* Update dependencies from https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal build Maestro-UpdateEngCommon_2202.25001 (#2181)

Microsoft.WinAppSDK.EngCommon
 From Version 1.1.0-20220210.0-CI -> To Version 1.1.0-20220225.0-CI

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* IsSelfContained() (#2135)

* Add detection if WinAppSDK is deployed via MSIX or SelfContained

* Tweaked IsSelfContained to use C++ constant for the framework packagefamilyname

* Added placeholder for dev docs how to detect/use IsSelfContained. Details coming in next commit

* Fixed IsSelfContained to use GetCurrentPackageGraph (as intentded. Doh! on my part)

* Added tests for IsSelfContained (and ToUtf8/16! Fixed an infinite recursion stack overflow bug too :-)

* Added docs. Partially fixed SelfContained package family name (handles 2 out of 3 cases). 3rd case in follow up PR

* Changed IsSelfContained() from inline code to exported function

* Fixed tests

* Added TestShutdown. Updated the docs.

Co-authored-by: Kyaw Thant <48363984+kythant@users.noreply.github.com>
Co-authored-by: TDBuild <DoNotEmailThis@dev.null.microsoft.com>
Co-authored-by: reunion-maestro[bot] <81196566+reunion-maestro[bot]@users.noreply.github.com>
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Howard Kapustein <howardk@microsoft.com>
Co-authored-by: Niklas Borson <niklasb@microsoft.com>
Co-authored-by: Hamza Usmani <hamza-usmani@users.noreply.github.com>
Co-authored-by: Hamza Usmani <mousma@microsoft.com>
Co-authored-by: Scott Darnell <20483794+aeloros@users.noreply.github.com>
Co-authored-by: Hui Chen <huichen@microsoft.com>
Co-authored-by: Joshua Larkin <70237359+j0shuams@users.noreply.github.com>
Co-authored-by: Ben Kuhn <bjk4929@yahoo.com>
Co-authored-by: Ben Kuhn <benkuhn@ntdev.microsoft.com>
Co-authored-by: Ryan Shepherd <ryansh@microsoft.com>
Co-authored-by: Eric Langlois <erlangl@microsoft.com>
Co-authored-by: Eric Johnson <ericjohnson327@gmail.com>
Co-authored-by: Eric Johnson <ejohn@microsoft.com>
Co-authored-by: Will Thant <kythant@microsoft.com>
Co-authored-by: Huzaifa Danish <Huzaifa.Danish@microsoft.com>
Co-authored-by: Huzaifa Danish <modanish@microsoft.com>
Co-authored-by: andreww-msft <30507740+andreww-msft@users.noreply.github.com>
Co-authored-by: Jeff Genovy <29107334+jefgen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-Deployment Issues related to packaging, installation, runtime (e.g., SelfContained, Unpackaged) needs-triage
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants