diff --git a/WindowsAppRuntime.sln b/WindowsAppRuntime.sln
index 8945f64557..775f444ce2 100644
--- a/WindowsAppRuntime.sln
+++ b/WindowsAppRuntime.sln
@@ -67,6 +67,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Framework.Math.Multiply", "
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAppRuntime.Framework", "test\DynamicDependency\data\Microsoft.WindowsAppRuntime.Framework\Microsoft.WindowsAppRuntime.Framework.vcxproj", "{9C1A6C58-52D6-4514-9120-5C339C5DF4BE}"
ProjectSection(ProjectDependencies) = postProject
+ {400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5} = {400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}
{4410D374-A90C-4ADF-8B15-AA2AAE2636BF} = {4410D374-A90C-4ADF-8B15-AA2AAE2636BF}
{BC5E5A3E-E733-4388-8B00-F8495DA7C778} = {BC5E5A3E-E733-4388-8B00-F8495DA7C778}
EndProjectSection
@@ -600,7 +601,9 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KozaniManagerRuntimeTests", "test\Kozani\KozaniManagerRuntimeTests\KozaniManagerRuntimeTests.vcxproj", "{4B4667B2-94DB-4A19-8270-0FDB1676C27B}"
ProjectSection(ProjectDependencies) = postProject
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5} = {400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}
+ {9C1A6C58-52D6-4514-9120-5C339C5DF4BE} = {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}
{B73AD907-6164-4294-88FB-F3C9C10DA1F1} = {B73AD907-6164-4294-88FB-F3C9C10DA1F1}
+ {D4D29026-C15C-49A3-BEC5-4D477028962C} = {D4D29026-C15C-49A3-BEC5-4D477028962C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KozaniManagerRuntime", "dev\Kozani\KozaniManagerRuntime\KozaniManagerRuntime.vcxproj", "{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}"
@@ -610,6 +613,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KozaniManagerRuntime", "dev
{CFC67AC3-3DC3-4981-A9BB-BC5ED06542D4} = {CFC67AC3-3DC3-4981-A9BB-BC5ED06542D4}
EndProjectSection
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{9CE0ED94-078A-405F-8599-BFC2D8D6E537}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KozaniManager.Msix", "test\Kozani\data\KozaniManager.Msix\KozaniManager.Msix.vcxproj", "{D4D29026-C15C-49A3-BEC5-4D477028962C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -2158,6 +2165,21 @@ Global
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}.Release|x64.Build.0 = Release|x64
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}.Release|x86.ActiveCfg = Release|Win32
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}.Release|x86.Build.0 = Release|Win32
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|Any CPU.Build.0 = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|ARM64.ActiveCfg = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|ARM64.Build.0 = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|x64.ActiveCfg = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|x64.Build.0 = Debug|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|x86.ActiveCfg = Debug|Win32
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Debug|x86.Build.0 = Debug|Win32
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|Any CPU.ActiveCfg = Release|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|Any CPU.Build.0 = Release|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|ARM64.ActiveCfg = Release|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|x64.ActiveCfg = Release|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|x64.Build.0 = Release|x64
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|x86.ActiveCfg = Release|Win32
+ {D4D29026-C15C-49A3-BEC5-4D477028962C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2342,6 +2364,8 @@ Global
{357BE857-3E5D-475A-8A03-583F44E6513B} = {9164C50F-E9CA-41BD-BCA9-5F30845FA257}
{4B4667B2-94DB-4A19-8270-0FDB1676C27B} = {357BE857-3E5D-475A-8A03-583F44E6513B}
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5} = {49CF5AB7-304F-4C78-A098-A77B2931F64E}
+ {9CE0ED94-078A-405F-8599-BFC2D8D6E537} = {9164C50F-E9CA-41BD-BCA9-5F30845FA257}
+ {D4D29026-C15C-49A3-BEC5-4D477028962C} = {9CE0ED94-078A-405F-8599-BFC2D8D6E537}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4B3D7591-CFEC-4762-9A07-ABE99938FB77}
diff --git a/dev/Kozani/KozaniManager/KozaniManager.vcxproj b/dev/Kozani/KozaniManager/KozaniManager.vcxproj
index 9b4c4409e7..254921b925 100644
--- a/dev/Kozani/KozaniManager/KozaniManager.vcxproj
+++ b/dev/Kozani/KozaniManager/KozaniManager.vcxproj
@@ -156,6 +156,9 @@
{CFC67AC3-3DC3-4981-A9BB-BC5ED06542D4}
+
+ {400ed5ec-4530-4adb-8dce-9d1e6708a1f5}
+
@@ -187,4 +190,4 @@
-
+
\ No newline at end of file
diff --git a/dev/Kozani/KozaniManager/KozaniManager.vcxproj.filters b/dev/Kozani/KozaniManager/KozaniManager.vcxproj.filters
index 6ad08a6a9c..8b12b793c9 100644
--- a/dev/Kozani/KozaniManager/KozaniManager.vcxproj.filters
+++ b/dev/Kozani/KozaniManager/KozaniManager.vcxproj.filters
@@ -32,9 +32,6 @@
Header Files
-
- Header Files
-
Source Files
@@ -45,4 +42,9 @@
-
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/dev/Kozani/KozaniManager/main.cpp b/dev/Kozani/KozaniManager/main.cpp
index 312878e7a8..6f3797055b 100644
--- a/dev/Kozani/KozaniManager/main.cpp
+++ b/dev/Kozani/KozaniManager/main.cpp
@@ -13,6 +13,8 @@
#include
+#include
+
using namespace Microsoft::WRL;
// Implement the LifetimeManager as a classic COM Out-of-Proc server, via WRL
@@ -22,13 +24,21 @@ static constexpr GUID KozaniManager_guid { PR_KOZANIMANAGER_CLSID_GUID };
struct __declspec(uuid(PR_KOZANIMANAGER_CLSID_STRING)) KozaniManagerImpl WrlFinal : RuntimeClass, IKozaniManager>
{
- STDMETHODIMP Initialize()
+ STDMETHODIMP ActivateRemoteApplication(
+ INT32 activationKind,
+ PCWSTR appUserModelId,
+ PCWSTR connectionRdpFilePath,
+ PCWSTR additionalSettingsFilePath,
+ ::IInspectable* activatedEventArgs,
+ IKozaniStatusCallback* statusCallback,
+ DWORD associatedLocalProcessId)
{
- return S_OK;
- }
+ // TODO: https://task.ms/42882034 temporary code to enable initial testing of the in-proc WinRT API and OOP COM API. Will be replaced with real impl later.
+ if (statusCallback != nullptr)
+ {
+ RETURN_IF_FAILED(statusCallback->OnActivated(associatedLocalProcessId));
+ }
- STDMETHODIMP Shutdown()
- {
return S_OK;
}
};
diff --git a/dev/Kozani/KozaniManagerInterface/KozaniManagerInterface.idl b/dev/Kozani/KozaniManagerInterface/KozaniManagerInterface.idl
index dc6c6797f3..7720c9ea98 100644
--- a/dev/Kozani/KozaniManagerInterface/KozaniManagerInterface.idl
+++ b/dev/Kozani/KozaniManagerInterface/KozaniManagerInterface.idl
@@ -3,13 +3,33 @@
import "oaidl.idl";
import "ocidl.idl";
+import "inspectable.idl";
+
+[object]
+[uuid(5239c3b0-9e90-11ed-87cd-0800200c9a66)]
+[pointer_default(unique)]
+interface IKozaniStatusCallback : IInspectable
+{
+ HRESULT OnActivated(DWORD pid);
+
+ HRESULT OnActivationFailed(
+ DWORD errorCode,
+ [in, string] LPCWSTR errorMessage);
+
+ HRESULT OnClosed();
+};
[object]
[uuid(5882f14f-f954-4af9-bbeb-a7c1a2a6357e)]
[pointer_default(unique)]
interface IKozaniManager : IUnknown
{
- HRESULT Initialize();
-
- HRESULT Shutdown();
+ HRESULT ActivateRemoteApplication(
+ INT32 activationKind,
+ [in, string] LPCWSTR appUserModelId,
+ [in, string] LPCWSTR connectionRdpFilePath,
+ [in, string] LPCWSTR additionalSettingsFilePath,
+ [in] IInspectable* activatedEventArgs,
+ [in] IKozaniStatusCallback* statusCallback,
+ DWORD associatedLocalProcessId);
};
diff --git a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.idl b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.idl
index 56fa13e638..9f0045d36f 100644
--- a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.idl
+++ b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.idl
@@ -9,9 +9,14 @@ namespace Microsoft.Kozani.ManagerRuntime
[contract(ManagerRuntimeContract, 1)]
runtimeclass ManagerRuntimeManager
{
- /// Get a ManagerRuntime manager for the caller's context.
- static ManagerRuntimeManager Open();
+ static ManagerRuntimeManager Create();
- void TODO_ReplaceMeWithRealContent();
+ void ActivateRemoteApplication(
+ Windows.ApplicationModel.Activation.ActivationKind activationKind,
+ String appUserModelId,
+ String connectionRdpFilePath,
+ String additionalSettingsFilePath,
+ Windows.ApplicationModel.Activation.IActivatedEventArgs args, // optional, can be nullptr
+ IInspectable statusCallback);
};
}
diff --git a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj
index 14683d372a..516c55af93 100644
--- a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj
+++ b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj
@@ -35,7 +35,7 @@
16.0
Win32Proj
{400ED5EC-4530-4ADB-8DCE-9D1E6708A1F5}
- KozaniManagerRuntime
+ Microsoft.Kozani.ManagerRuntime
10.0
true
true
@@ -92,7 +92,7 @@
- (MSBuildThisFileDirectory);$(OutDir)\..\WindowsAppRuntime_DLL;$(RepoRoot)\dev\WindowsAppRuntime_Insights;$(RepoRoot)\dev\common;$(IntDir);%(AdditionalIncludeDirectories)
+ (MSBuildThisFileDirectory);$(OutDir)..\KozaniManagerProxyStub;$(OutDir)\..\WindowsAppRuntime_DLL;$(RepoRoot)\dev\WindowsAppRuntime_Insights;$(RepoRoot)\dev\common;$(IntDir);%(AdditionalIncludeDirectories)
Use
pch.h
KOZANIMANAGERRUNTIMEDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
@@ -189,6 +189,11 @@
$(RepoRoot)\dev\Common;$(RepoRoot);%(AdditionalIncludeDirectories)
+
+
+ {cfc67ac3-3dc3-4981-a9bb-bc5ed06542d4}
+
+
@@ -218,4 +223,4 @@
-
+
\ No newline at end of file
diff --git a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj.filters b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj.filters
index 8c1495aa34..c120a9f8e2 100644
--- a/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj.filters
+++ b/dev/Kozani/KozaniManagerRuntime/KozaniManagerRuntime.vcxproj.filters
@@ -53,6 +53,9 @@
Source Files
+
+ Source Files
+
diff --git a/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.cpp b/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.cpp
index 5ac6e01514..db5d985a01 100644
--- a/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.cpp
+++ b/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.cpp
@@ -5,16 +5,35 @@
#include "M.K.MR.ManagerRuntimeManager.h"
-#include "Microsoft.Kozani.ManagerRuntime.ManagerRuntimeManager.g.cpp"
+#include "ManagerRuntimeManager.g.cpp"
namespace winrt::Microsoft::Kozani::ManagerRuntime::implementation
{
- winrt::Microsoft::Kozani::ManagerRuntime::ManagerRuntimeManager ManagerRuntimeManager::Open()
+ ManagerRuntimeManager::ManagerRuntimeManager()
{
- throw hresult_not_implemented();
+ m_kozaniManager = wil::CoCreateInstance(CLSCTX_LOCAL_SERVER);
}
- void ManagerRuntimeManager::TODO_ReplaceMeWithRealContent()
+
+ winrt::Microsoft::Kozani::ManagerRuntime::ManagerRuntimeManager ManagerRuntimeManager::Create()
+ {
+ return winrt::make();
+ }
+
+ void ManagerRuntimeManager::ActivateRemoteApplication(
+ Windows::ApplicationModel::Activation::ActivationKind activationKind,
+ winrt::hstring appUserModelId,
+ winrt::hstring connectionRdpFilePath,
+ winrt::hstring additionalSettingsFilePath,
+ Windows::ApplicationModel::Activation::IActivatedEventArgs args,
+ IInspectable statusCallback)
{
- throw hresult_not_implemented();
+ winrt::check_hresult(m_kozaniManager->ActivateRemoteApplication(
+ static_cast(activationKind),
+ appUserModelId.c_str(),
+ connectionRdpFilePath.c_str(),
+ additionalSettingsFilePath.c_str(),
+ reinterpret_cast<::IInspectable*>(winrt::get_abi(args)),
+ reinterpret_cast<::IKozaniStatusCallback*>(winrt::get_abi(statusCallback)),
+ GetCurrentProcessId()));
}
}
diff --git a/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.h b/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.h
index 651a4d3d7f..900f22bb5c 100644
--- a/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.h
+++ b/dev/Kozani/KozaniManagerRuntime/M.K.MR.ManagerRuntimeManager.h
@@ -3,16 +3,27 @@
#pragma once
-#include "Microsoft.Kozani.ManagerRuntime.ManagerRuntimeManager.g.h"
+#include
+#include "ManagerRuntimeManager.g.h"
namespace winrt::Microsoft::Kozani::ManagerRuntime::implementation
{
struct ManagerRuntimeManager : ManagerRuntimeManagerT
{
- ManagerRuntimeManager() = default;
+ ManagerRuntimeManager();
- static winrt::Microsoft::Kozani::ManagerRuntime::ManagerRuntimeManager Open();
- void TODO_ReplaceMeWithRealContent();
+ static winrt::Microsoft::Kozani::ManagerRuntime::ManagerRuntimeManager Create();
+
+ void ActivateRemoteApplication(
+ Windows::ApplicationModel::Activation::ActivationKind activationKind,
+ winrt::hstring appUserModelId,
+ winrt::hstring connectionRdpFilePath,
+ winrt::hstring additionalSettingsFilePath,
+ Windows::ApplicationModel::Activation::IActivatedEventArgs args,
+ IInspectable statusCallback);
+
+ private:
+ wil::com_ptr m_kozaniManager;
};
}
namespace winrt::Microsoft::Kozani::ManagerRuntime::factory_implementation
diff --git a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/Microsoft.WindowsAppRuntime.Framework.vcxproj b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/Microsoft.WindowsAppRuntime.Framework.vcxproj
index 1335d97d4e..bb88b8070e 100644
--- a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/Microsoft.WindowsAppRuntime.Framework.vcxproj
+++ b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/Microsoft.WindowsAppRuntime.Framework.vcxproj
@@ -91,6 +91,8 @@
+
+
$(RepoTestCertificatePFX)
diff --git a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml
index fecee5598d..1d4eb4e23a 100644
--- a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml
+++ b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml
@@ -116,6 +116,12 @@
+
+
+ KozaniManagerRuntime.dll
+
+
+
PushNotificationsLongRunningTask.ProxyStub.dll
diff --git a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.cpp b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.cpp
index 3a1e9c4181..4ac8d67bdc 100644
--- a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.cpp
+++ b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.cpp
@@ -2,12 +2,70 @@
// Licensed under the MIT License.
#include "pch.h"
+#include
+#include "winrt/Microsoft.Kozani.ManagerRuntime.h"
namespace TB = ::Test::Bootstrap;
namespace TP = ::Test::Packages;
+namespace KozaniManagerTestPackage
+{
+ constexpr PCWSTR c_PackageDirName = L"KozaniManager";
+ constexpr PCWSTR c_PackageFullName = L"KozaniManager_1.0.0.0_neutral__8wekyb3d8bbwe";
+}
+
namespace Test::KozaniManagerRuntimeTests
{
+ struct MyKozaniStatusCallback : winrt::implements
+ {
+#pragma region IKozaniStatusCallback_methods
+ STDMETHODIMP OnActivated(DWORD pid)
+ {
+ WEX::Logging::Log::Comment(WEX::Common::String().Format(L"IKozaniStausCallback::OnActivated is called. pid = %u", pid));
+ m_isActivated = true;
+ return S_OK;
+ }
+
+ STDMETHODIMP OnActivationFailed(
+ DWORD errorCode,
+ PCWSTR errorMessage)
+ {
+ WEX::Logging::Log::Comment(
+ WEX::Common::String().Format(L"IKozaniStausCallback::OnActivationFailed is called. errorCode = 0x%x, errorMessage: %s",
+ errorCode, errorMessage));
+ m_isActivationFailed = true;
+ return S_OK;
+ }
+
+ STDMETHODIMP OnClosed()
+ {
+ WEX::Logging::Log::Comment(L"IKozaniStausCallback::OnClosed is called.");
+ m_isClosed = true;
+ return S_OK;
+ }
+#pragma endregion IKozaniStatusCallback_methods
+
+ bool IsActivated()
+ {
+ return m_isActivated;
+ }
+
+ bool IsActivationFailed()
+ {
+ return m_isActivationFailed;
+ }
+
+ bool IsClosed()
+ {
+ return m_isClosed;
+ }
+
+ private:
+ bool m_isActivated{};
+ bool m_isActivationFailed{};
+ bool m_isClosed{};
+ };
+
class KozaniManagerRuntimeTests
{
public:
@@ -18,18 +76,28 @@ namespace Test::KozaniManagerRuntimeTests
TEST_CLASS_SETUP(ClassSetup)
{
::TB::Setup();
+ ::TP::AddPackage(KozaniManagerTestPackage::c_PackageDirName, KozaniManagerTestPackage::c_PackageFullName);
return true;
}
TEST_CLASS_CLEANUP(ClassCleanup)
{
+ ::TP::RemovePackageIfNecessary(KozaniManagerTestPackage::c_PackageFullName);
::TB::Cleanup();
return true;
}
- // TODO Replace this with your own tests
- TEST_METHOD(JustDoIt)
+ TEST_METHOD(ActivateRemoteApplication_Launch)
{
+ auto runtimeManager{ winrt::Microsoft::Kozani::ManagerRuntime::ManagerRuntimeManager::Create() };
+ auto statusCallback{ winrt::make_self() };
+
+ runtimeManager.ActivateRemoteApplication(winrt::Windows::ApplicationModel::Activation::ActivationKind::Launch,
+ L"Microsoft.WindowsCalculator_8wekyb3d8bbwe!App", L"c:\\data\\connection.rdp", L"c:\\data\\additionalSettings.txt",
+ nullptr, // IActivatedEventArgs
+ statusCallback.as());
+
+ VERIFY_IS_TRUE(statusCallback->IsActivated(), L"IKozaniStausCallback::OnActivated() should have been called.");
}
};
}
diff --git a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj
index 1292e1e792..164ab7d60d 100644
--- a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj
+++ b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj
@@ -80,7 +80,7 @@
Use
true
pch.h
- $(RepoRoot)\test\inc;$(RepoRoot)\dev\common;$(VCInstallDir)UnitTest\include;$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;%(AdditionalIncludeDirectories)
+ $(RepoRoot)\test\inc;$(RepoRoot)\dev\common;$(VCInstallDir)UnitTest\include;$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;$(OutDir)..\KozaniManagerProxyStub;%(AdditionalIncludeDirectories)
$(RepoRoot);%(AdditionalIncludeDirectories)
@@ -127,6 +127,9 @@
{f76b776e-86f5-48c5-8fc7-d2795ecc9746}
+
+ {400ed5ec-4530-4adb-8dce-9d1e6708a1f5}
+
@@ -152,4 +155,4 @@
-
+
\ No newline at end of file
diff --git a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj.filters b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj.filters
index ccb428fb94..483d29edf1 100644
--- a/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj.filters
+++ b/test/Kozani/KozaniManagerRuntimeTests/KozaniManagerRuntimeTests.vcxproj.filters
@@ -30,4 +30,7 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/test/Kozani/data/KozaniManager.Msix/Assets/SplashScreen.png b/test/Kozani/data/KozaniManager.Msix/Assets/SplashScreen.png
new file mode 100644
index 0000000000..1848213180
Binary files /dev/null and b/test/Kozani/data/KozaniManager.Msix/Assets/SplashScreen.png differ
diff --git a/test/Kozani/data/KozaniManager.Msix/Assets/Square150x150Logo.png b/test/Kozani/data/KozaniManager.Msix/Assets/Square150x150Logo.png
new file mode 100644
index 0000000000..a50c703794
Binary files /dev/null and b/test/Kozani/data/KozaniManager.Msix/Assets/Square150x150Logo.png differ
diff --git a/test/Kozani/data/KozaniManager.Msix/Assets/Square44x44Logo.png b/test/Kozani/data/KozaniManager.Msix/Assets/Square44x44Logo.png
new file mode 100644
index 0000000000..844b60c201
Binary files /dev/null and b/test/Kozani/data/KozaniManager.Msix/Assets/Square44x44Logo.png differ
diff --git a/test/Kozani/data/KozaniManager.Msix/Assets/Wide310x150Logo.png b/test/Kozani/data/KozaniManager.Msix/Assets/Wide310x150Logo.png
new file mode 100644
index 0000000000..b5d5f2c429
Binary files /dev/null and b/test/Kozani/data/KozaniManager.Msix/Assets/Wide310x150Logo.png differ
diff --git a/test/Kozani/data/KozaniManager.Msix/Assets/logo.png b/test/Kozani/data/KozaniManager.Msix/Assets/logo.png
new file mode 100644
index 0000000000..fd2293e7bd
Binary files /dev/null and b/test/Kozani/data/KozaniManager.Msix/Assets/logo.png differ
diff --git a/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj b/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj
new file mode 100644
index 0000000000..c3851ba2ad
--- /dev/null
+++ b/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj
@@ -0,0 +1,105 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ {d4d29026-c15c-49a3-bec5-4d477028962c}
+ Win32Proj
+ KozaniManager.Msix
+
+
+
+ Makefile
+ true
+ v143
+
+
+ Makefile
+ false
+ v143
+
+
+ Makefile
+ true
+ v143
+
+
+ Makefile
+ false
+ v143
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(PostBuildDependsOn);MakeMSIX
+ REM Nothing to do!
+ REM TODO Clean then Build
+ REM TODO Clean
+ KozaniManager.msix
+ KozaniManager
+ $(TargetBasename)
+ $(OutDir)$(TargetExe)
+ $(TargetExeDir)\$(TargetExe).exe
+ $(TargetBasename)ProxyStub
+ $(OutDir)$(TargetExeProxyStub)
+ $(TargetExeProxyStubDir)\$(TargetExeProxyStub).dll
+
+
+
+
+
+
+
+
+ $(RepoTestCertificatePFX)
+ $(RepoTestCertificatePassword)
+
+
+
+
+
+
+
+ {cfc67ac3-3dc3-4981-a9bb-bc5ed06542d4}
+
+
+ {829cdb09-eefe-4188-a045-3fc6be7bd96b}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj.filters b/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj.filters
new file mode 100644
index 0000000000..d6e82f795e
--- /dev/null
+++ b/test/Kozani/data/KozaniManager.Msix/KozaniManager.Msix.vcxproj.filters
@@ -0,0 +1,20 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/Kozani/data/KozaniManager.Msix/appxmanifest.xml b/test/Kozani/data/KozaniManager.Msix/appxmanifest.xml
new file mode 100644
index 0000000000..2d00fa8111
--- /dev/null
+++ b/test/Kozani/data/KozaniManager.Msix/appxmanifest.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+ KozaniManager for tests
+ Microsoft Corporation
+ Assets\logo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+