diff --git a/Samples/MultiHeadedPackage/README.md b/Samples/MultiHeadedPackage/README.md new file mode 100644 index 000000000..a8038b4eb --- /dev/null +++ b/Samples/MultiHeadedPackage/README.md @@ -0,0 +1,65 @@ +--- +page_type: sample +languages: +- csharp +products: +- windows +- windows-app-sdk +name: "Multi-headed MSIX package sample" +urlFragment: multi-headed-package +description: "Shows how to package multiple executables in a single MSIX or sparse package" +extendedZipContent: +- path: LICENSE + target: LICENSE +--- +# Multi-headed MSIX package sample + +These samples demonstrate how to create **multi-headed packages** — MSIX or sparse packages that contain multiple `` elements in a single `Package.appxmanifest`. Each application entry gets its own Start menu tile and can be launched independently, while sharing the same package identity and installation lifecycle. + +## Samples + +### MSIX sample (`cs/cs-winui-msix/`) + +A WinUI 3 solution using single-project MSIX packaging with two projects: + +- **PrimaryApp** — The main WinUI app that owns the package manifest. Uses `$targetnametoken$` tokens so the build system fills in the correct executable name. +- **SecondaryApp** — A secondary WinUI app referenced by PrimaryApp. Its executable name is hardcoded in the manifest as `SecondaryApp.exe` with `EntryPoint="Windows.FullTrustApplication"`. + +After deployment, both apps appear in the Start menu as separate entries. + +### Sparse sample (`cs/cs-wpf-sparse/`) + +A WPF solution demonstrating multi-headed sparse packages with runtime registration: + +- **PrimaryApp** — A WPF app with `WindowsPackageType=Sparse` that includes Register/Unregister/Restart buttons to manage the sparse package at runtime. +- **SecondaryApp** — A minimal WPF app that detects whether it has package identity (which it will once the sparse package is registered). + +## Prerequisites + +* See [System requirements for Windows app development](https://docs.microsoft.com/windows/apps/windows-app-sdk/system-requirements). +* Make sure that your development environment is set up correctly—see [Install tools for developing apps for Windows 10 and Windows 11](https://docs.microsoft.com/windows/apps/windows-app-sdk/set-up-your-development-environment). + +## Building and running + +### MSIX sample + +1. Open `cs/cs-winui-msix/MultiHeadedMsix.sln` in Visual Studio. +2. Set **PrimaryApp** as the startup project. +3. Press **F5** to build, deploy, and launch the primary app. +4. Check the Start menu for both "Primary App" and "Secondary App" entries. + +### Sparse sample + +1. Open `cs/cs-wpf-sparse/MultiHeadedSparse.sln` in Visual Studio. +2. Set **PrimaryApp** as the startup project. +3. Press **Ctrl+F5** to run without debugging. +4. Click **Register Package** to register the sparse package. +5. Click **Restart** to relaunch with package identity. +6. Run **SecondaryApp** separately to verify it also detects the package identity. + +## Related links + +- [Windows App SDK](https://docs.microsoft.com/windows/apps/windows-app-sdk/) +- [Single-project MSIX packaging](https://docs.microsoft.com/windows/apps/windows-app-sdk/single-project-msix) +- [Sparse packages](https://docs.microsoft.com/windows/apps/desktop/modernize/grant-identity-to-nonpackaged-apps) +- [WindowsAppSDK issue #5586](https://github.com/microsoft/WindowsAppSDK/issues/5586) diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/MultiHeadedMsix.sln b/Samples/MultiHeadedPackage/cs/cs-winui-msix/MultiHeadedMsix.sln new file mode 100644 index 000000000..5d8ec9a6b --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/MultiHeadedMsix.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31717.71 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrimaryApp", "PrimaryApp\PrimaryApp.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecondaryApp", "SecondaryApp\SecondaryApp.csproj", "{B2C3D4E5-F6A7-8901-BCDE-F12345678901}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|ARM64.Build.0 = Debug|ARM64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x64.ActiveCfg = Debug|x64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x64.Build.0 = Debug|x64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x64.Deploy.0 = Debug|x64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.ActiveCfg = Debug|x86 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.Build.0 = Debug|x86 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.Deploy.0 = Debug|x86 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|ARM64.ActiveCfg = Release|ARM64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|ARM64.Build.0 = Release|ARM64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x64.ActiveCfg = Release|x64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x64.Build.0 = Release|x64 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x86.ActiveCfg = Release|x86 + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x86.Build.0 = Release|x86 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|ARM64.Build.0 = Debug|ARM64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|x64.ActiveCfg = Debug|x64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|x64.Build.0 = Debug|x64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|x86.ActiveCfg = Debug|x86 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Debug|x86.Build.0 = Debug|x86 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|ARM64.ActiveCfg = Release|ARM64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|ARM64.Build.0 = Release|ARM64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|x64.ActiveCfg = Release|x64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|x64.Build.0 = Release|x64 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|x86.ActiveCfg = Release|x86 + {B2C3D4E5-F6A7-8901-BCDE-F12345678901}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D1E2F3A4-B5C6-7890-DEFA-123456789ABC} + EndGlobalSection +EndGlobal diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml new file mode 100644 index 000000000..c9ba1181a --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml.cs b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml.cs new file mode 100644 index 000000000..9a4f790a6 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/App.xaml.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Microsoft.UI.Xaml; + +namespace PrimaryApp +{ + public partial class App : Application + { + private Window mainWindow; + + public App() + { + this.InitializeComponent(); + } + + protected override void OnLaunched(LaunchActivatedEventArgs args) + { + mainWindow = new MainWindow(); + mainWindow.Activate(); + } + } +} diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/SplashScreen.png b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/SplashScreen.png new file mode 100644 index 000000000..184821318 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/SplashScreen.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square150x150Logo.png b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square150x150Logo.png new file mode 100644 index 000000000..a50c70379 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square150x150Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square44x44Logo.png b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square44x44Logo.png new file mode 100644 index 000000000..844b60c20 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Square44x44Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Wide310x150Logo.png b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Wide310x150Logo.png new file mode 100644 index 000000000..b5d5f2c42 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/Wide310x150Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/logo.png b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/logo.png new file mode 100644 index 000000000..fd2293e7b Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Assets/logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml new file mode 100644 index 000000000..e5c9d6ab0 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml.cs b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml.cs new file mode 100644 index 000000000..355be2729 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/MainWindow.xaml.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Microsoft.UI.Xaml; + +namespace PrimaryApp +{ + public sealed partial class MainWindow : Window + { + public MainWindow() + { + this.InitializeComponent(); + } + } +} diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Package.appxmanifest b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Package.appxmanifest new file mode 100644 index 000000000..dc8cc8967 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/Package.appxmanifest @@ -0,0 +1,63 @@ + + + + + + + + Multi-Headed MSIX Sample + Microsoft Corporation + Assets\logo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/PrimaryApp.csproj b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/PrimaryApp.csproj new file mode 100644 index 000000000..aa71212f1 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/PrimaryApp.csproj @@ -0,0 +1,38 @@ + + + WinExe + net6.0-windows10.0.19041.0 + 10.0.17763.0 + PrimaryApp + app.manifest + x86;x64;ARM64 + win10-x86;win10-x64;win10-arm64 + true + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/app.manifest b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/app.manifest new file mode 100644 index 000000000..f8422c907 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/PrimaryApp/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/Program.cs b/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/Program.cs new file mode 100644 index 000000000..31096c62f --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; + +namespace SecondaryApp +{ + class Program + { + static void Main() + { + Console.WriteLine("=== Secondary App - Multi-Headed MSIX ==="); + Console.WriteLine(); + Console.WriteLine("This is the Secondary App."); + Console.WriteLine("Both this app and the Primary App were installed from the same MSIX package."); + Console.WriteLine(); + Console.WriteLine("Press any key to exit..."); + Console.ReadKey(); + } + } +} diff --git a/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/SecondaryApp.csproj b/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/SecondaryApp.csproj new file mode 100644 index 000000000..55e70b613 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-winui-msix/SecondaryApp/SecondaryApp.csproj @@ -0,0 +1,11 @@ + + + Exe + net6.0-windows10.0.19041.0 + 10.0.17763.0 + SecondaryApp + x86;x64;ARM64 + win10-x86;win10-x64;win10-arm64 + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/MultiHeadedSparse.sln b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/MultiHeadedSparse.sln new file mode 100644 index 000000000..0e51cdc26 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/MultiHeadedSparse.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31717.71 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrimaryApp", "PrimaryApp\PrimaryApp.csproj", "{C3D4E5F6-A7B8-9012-CDEF-A12345678902}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecondaryApp", "SecondaryApp\SecondaryApp.csproj", "{D4E5F6A7-B8C9-0123-DEFA-B23456789013}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|ARM64.Build.0 = Debug|ARM64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|x64.ActiveCfg = Debug|x64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|x64.Build.0 = Debug|x64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|x86.ActiveCfg = Debug|x86 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Debug|x86.Build.0 = Debug|x86 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|Any CPU.Build.0 = Release|Any CPU + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|ARM64.ActiveCfg = Release|ARM64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|ARM64.Build.0 = Release|ARM64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|x64.ActiveCfg = Release|x64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|x64.Build.0 = Release|x64 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|x86.ActiveCfg = Release|x86 + {C3D4E5F6-A7B8-9012-CDEF-A12345678902}.Release|x86.Build.0 = Release|x86 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|ARM64.Build.0 = Debug|ARM64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|x64.ActiveCfg = Debug|x64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|x64.Build.0 = Debug|x64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|x86.ActiveCfg = Debug|x86 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Debug|x86.Build.0 = Debug|x86 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|Any CPU.Build.0 = Release|Any CPU + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|ARM64.ActiveCfg = Release|ARM64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|ARM64.Build.0 = Release|ARM64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|x64.ActiveCfg = Release|x64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|x64.Build.0 = Release|x64 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|x86.ActiveCfg = Release|x86 + {D4E5F6A7-B8C9-0123-DEFA-B23456789013}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E2F3A4B5-C6D7-8901-EFAB-234567890CDE} + EndGlobalSection +EndGlobal diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml new file mode 100644 index 000000000..8470c89ca --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml @@ -0,0 +1,10 @@ + + + + + diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml.cs b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml.cs new file mode 100644 index 000000000..25e0e509b --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/App.xaml.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System.Windows; + +namespace PrimaryApp +{ + public partial class App : Application + { + } +} diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/SplashScreen.png b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/SplashScreen.png new file mode 100644 index 000000000..184821318 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/SplashScreen.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square150x150Logo.png b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square150x150Logo.png new file mode 100644 index 000000000..a50c70379 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square150x150Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square44x44Logo.png b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square44x44Logo.png new file mode 100644 index 000000000..844b60c20 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Square44x44Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Wide310x150Logo.png b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Wide310x150Logo.png new file mode 100644 index 000000000..b5d5f2c42 Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/Wide310x150Logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/logo.png b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/logo.png new file mode 100644 index 000000000..fd2293e7b Binary files /dev/null and b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/Assets/logo.png differ diff --git a/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/MainWindow.xaml b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/MainWindow.xaml new file mode 100644 index 000000000..756e3e980 --- /dev/null +++ b/Samples/MultiHeadedPackage/cs/cs-wpf-sparse/PrimaryApp/MainWindow.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + +