From 1c6100742690aedd0f8530cbd481d2e6206d5a44 Mon Sep 17 00:00:00 2001 From: Pete Brown Date: Fri, 28 Feb 2025 01:20:14 -0500 Subject: [PATCH 1/6] Add dev component prep into settings app --- .../Microsoft.Midi.Settings/App.xaml.cs | 6 +- .../MidiEndpointDeviceListItemControl.xaml | 1 + .../Microsoft.Midi.Settings.csproj | 4 + .../Models/AppState.cs | 30 +- .../Microsoft.Midi.Settings/NativeMethods.txt | 4 + .../Sections/Endpoints/DeviceDetailPage.xaml | 6 + .../Endpoints/LOOP/EndpointsLoopPage.xaml | 2 +- .../Strings/en-us/Resources.resw | 27 ++ .../Styles/TextBlock.xaml | 1 + .../ViewModels/ForDevelopersViewModel.cs | 276 +++++++++++++++++- .../ViewModels/HomeViewModel.cs | 2 + .../ViewModels/ShellViewModel.cs | 4 + .../Views/ForDevelopersPage.xaml | 33 +++ .../Views/ForDevelopersPage.xaml.cs | 175 +++++++++++ .../Views/HomePage.xaml | 105 ++++--- .../Views/ManagementSessionsPage.xaml | 1 + .../Views/PluginsTransportPage.xaml | 3 +- .../Views/ShellPage.xaml | 89 +++++- .../Service/MidiServiceHelper.cs | 92 ++++-- 19 files changed, 776 insertions(+), 85 deletions(-) create mode 100644 src/user-tools/midi-settings/Microsoft.Midi.Settings/NativeMethods.txt diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/App.xaml.cs b/src/user-tools/midi-settings/Microsoft.Midi.Settings/App.xaml.cs index 16b01e755..b4f89867c 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/App.xaml.cs +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/App.xaml.cs @@ -193,10 +193,12 @@ protected async override void OnLaunched(LaunchActivatedEventArgs args) base.OnLaunched(args); // initialize the SDK - if (AppState.Current.Initialize()) + if (AppState.Current.InitializeSdk()) { - await App.GetService().ActivateAsync(args); + // this is not required for app startup + AppState.Current.InitializeService(); + await App.GetService().ActivateAsync(args); } else { diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Controls/MidiEndpointDeviceListItemControl.xaml b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Controls/MidiEndpointDeviceListItemControl.xaml index 864184711..7231ea0a4 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Controls/MidiEndpointDeviceListItemControl.xaml +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Controls/MidiEndpointDeviceListItemControl.xaml @@ -24,6 +24,7 @@ diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Microsoft.Midi.Settings.csproj b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Microsoft.Midi.Settings.csproj index e3591afeb..5d594a514 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Microsoft.Midi.Settings.csproj +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Microsoft.Midi.Settings.csproj @@ -109,6 +109,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Models/AppState.cs b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Models/AppState.cs index 22c820224..5747e1173 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Models/AppState.cs +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Models/AppState.cs @@ -20,13 +20,19 @@ public class AppState private static AppState? _current; private MidiDesktopAppSdkInitializer? _initializer; + private bool _serviceInitialized = false; private AppState() { } - public bool Initialize() + public bool IsServiceInitialized() + { + return _serviceInitialized; + } + + public bool InitializeSdk() { _initializer = Microsoft.Windows.Devices.Midi2.Initialization.MidiDesktopAppSdkInitializer.Create(); @@ -40,21 +46,35 @@ public bool Initialize() if (!_initializer!.InitializeSdkRuntime()) { // TODO: Localize these messages - var dialog = new MessageDialog("Unable to initialize the Windows MIDI Services SDK runtime. Is it installed? Exiting."); - dialog.ShowAsync().Wait(); + //var dialog = new MessageDialog("Unable to initialize the Windows MIDI Services SDK runtime. Is it installed? Exiting."); + //dialog.ShowAsync().Wait(); return false; } + return true; + } + + public bool InitializeService() + { + if (_initializer == null) + { + // TODO: Failed + return false; + + } + if (!_initializer!.EnsureServiceAvailable()) { // TODO: Localize these messages - var dialog = new MessageDialog("The Windows MIDI Services SDK is installed, but we failed to start the service. Exiting."); - dialog.ShowAsync().Wait(); + //var dialog = new MessageDialog("The Windows MIDI Services SDK is installed, but we failed to start the service."); + //dialog.ShowAsync().Wait(); return false; } + _serviceInitialized = true; + StartDeviceWatcher(true); return true; diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/NativeMethods.txt b/src/user-tools/midi-settings/Microsoft.Midi.Settings/NativeMethods.txt new file mode 100644 index 000000000..93f187951 --- /dev/null +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/NativeMethods.txt @@ -0,0 +1,4 @@ +FileOpenDialog +IFileOpenDialog +CoCreateInstance +RtlAdjustPrivilege \ No newline at end of file diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/DeviceDetailPage.xaml b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/DeviceDetailPage.xaml index 6cd409a9c..896ec1cc7 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/DeviceDetailPage.xaml +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/DeviceDetailPage.xaml @@ -102,6 +102,7 @@ @@ -143,6 +144,7 @@ @@ -190,6 +192,7 @@ @@ -237,6 +240,7 @@ @@ -361,6 +365,7 @@ @@ -469,6 +474,7 @@ diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/LOOP/EndpointsLoopPage.xaml b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/LOOP/EndpointsLoopPage.xaml index 5433b147f..5b97f8761 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/LOOP/EndpointsLoopPage.xaml +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Sections/Endpoints/LOOP/EndpointsLoopPage.xaml @@ -43,7 +43,7 @@ - + diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Strings/en-us/Resources.resw b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Strings/en-us/Resources.resw index 2a7944e32..c59e694dc 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Strings/en-us/Resources.resw +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Strings/en-us/Resources.resw @@ -471,4 +471,31 @@ Save to Registry + + Enable Installation of Developer Releases + + + In order to install developer previews of the service or plugins, you must first take ownership of the registry entries which are used for component registration. This step requires Administrator rights, and must be repeated after any new Windows upgrade (not update, but full OS upgrade). + + + Prepare for Developer Install + + + Replace wdmaud2.drv with Developer Version + + + Changes made require that you restart your PC before they can take effect. + + + Restart Now + + + Administrator + + + Developer Mode Enabled + + + No MIDI Service + \ No newline at end of file diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Styles/TextBlock.xaml b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Styles/TextBlock.xaml index 729590fcb..8496142fa 100644 --- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Styles/TextBlock.xaml +++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Styles/TextBlock.xaml @@ -63,6 +63,7 @@