diff --git a/.gitignore b/.gitignore
index a5f986e..8320aab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,14 @@ VRStartAssistant/obj/
riderModule.iml
/_ReSharper.Caches/
.idea/
+.vs/
Build/
+Build Long/
+Build Setup/
*.snk
-VRStartAssistant/Secret/
Resources/*.psd
+Resources/*.url
+VRSASetup/Debug/
+VRSASetup/Release/
+
+VRStartAssistantUI/
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 96e597d..b6b9746 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2023 Lily
+Copyright (c) 2023 - 2025 Lily (Minty Labs)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 6d14909..20f4e33 100644
--- a/README.md
+++ b/README.md
@@ -20,8 +20,7 @@
VRStartAssistant
- An all-in-one app that helps me set up a one-click automated VR setup.
- This is not meant for others to use out of the box. — no executables will be provided
+ An all-in-one app that helps set up a one-click automated VR setup.
@@ -38,6 +37,7 @@
Built With
+ Know the Configuration
License
Acknowledgments
@@ -48,23 +48,119 @@
## About The Project
-An all-in-one app that helps me set up a one-click automated VR setup. It starts [VRCX](https://github.com/vrcx-team/VRCX), [VRChat OSC Router](https://github.com/SutekhVRC/VOR), [SteamVR](https://store.steampowered.com/app/250820/SteamVR/), [AdGoBye](https://github.com/AdGoBye/AdGoBye), [VRChat](https://hello.vrchat.com/), [VRCVideoCacher](https://git.ellyvr.dev/Elly/VRCVideoCacher), [HOSCY](https://github.com/PaciStardust/HOSCY), [HeartRateOnStream-OSC](https://github.com/Curtis-VL/HeartRateOnStream-OSC), [OSCLeash](https://github.com/ZenithVal/OSCLeash), and (a custom/beta version of) [WindowsXSO][WindowsXSOUrl] in a time-based, sequential order.
+An all-in-one app that helps me set up a one-click automated VR setup. It starts various applications1 , as well as, [SteamVR](https://store.steampowered.com/app/250820/SteamVR/), and [VRChat](https://hello.vrchat.com/) in a time-based, sequential order.
It also automatically turns on some smart plugs used for Base Stations, and turns them off upon SteamVR exit.
+
+1 - Based on what is in configuration file
+
+## Know the Configuration
+
+
+ General
+
+ ConfigVersion
- Specifies the amount of times the configuration has been revised. (DO NOT EDIT THIS VALUE)
+
+
+
+
+ VR
+
+ AutoLaunchWithSteamVr
- Allows you to set if you want this application to start automatically when you start SteamVR, instead of manually every time.
+ HasRegistered
- Specifies whether SteamVR has been registered to auto start (DO NOT EDIT THIS VALUE)
+
+
+
+
+ Audio
+
+ DefaultAudioDevice
- The ID number of the audio device
+ ApplyAllDevicesToList
- Add all your speaker devices to the list below
+
+ AudioDevices
- The list of audio devices (speakers) you have the program auto switch to when starting the program / SteamVR
+
+
+
+ Audio Entry
+
+ Id
- Number of ID
+ Name
- Human Readable Name
+ Guid
- Unique id for windows to assign
+
+
+
+
+
+ SwitchBackAudioDevice
- The device you want to switch back to after SteamVR closes
+
+
+
+
+ Home Assistant
+
+
+
+
+ OSC
+
+ ListeningPort
- The OSC Listening port
+ SendingPort
- The OSC Sending port
+ ShowMediaStatus
- In VRChat, display a message above your head when a song changes (true or false value)
+ ForceStartMediaStatus
- Forcably run the media service in case VRChat is not detected (true or false value)
+ CustomBlockWordsContains
- List of word(s) used to no show the message [ex. if you add the word "star", any song name or artist with that word will not display a message]
+ CustomBlockWordsEquals
- List of word(s) used to no show the message [ex. if you add the word(s) "Tokyo Machine", and song or artist matching that will not display a message]
+ SecondsToAutoHideChatBox
- Number of seconds the message will show for
+
+
+
+
+ Programs
+
+ Programs
- The list of programs you want to auto start with this program
+
+
+
+ Program Entry
+
+ Name
- The name so you know what it is
+ ExePath
- File path to the program excecutable
+ Arugments
- Any arguments you may need for that program
+ StartWithVrsa
- Specify if you want the your program to start with VRSA
+ StartMinimized
- Start your program with it's window minimized
+ HasMultiProcesses
- Specify with the program has multiple processes [ex. VRCX has multiple processes]
+ ProcessName
- The name of the process [find out how to get this name here (me selecting VRCX) ]
+ FallbackProcessStartingNeeded
- Set this to true if the program does not launch your program correctly
+
+
+
+
+
+
+
### Built With
-[![Rider][Rider]][RiderUrl] [![DotNet][CSharp]][DotNetUrl] [![Sublime Text][Sublime]][SublimeUrl]
+[![Rider][Rider]][RiderUrl] [![VisualStudio][VisualStudio]][VisualStudioUrl] [![DotNet][CSharp]][DotNetUrl] [![Sublime Text][Sublime]][SublimeUrl]
[![AudioSwitcher][AudioSwitcher]][AudioSwitcherUrl]
[![RestSharp][RestSharp]][RestSharpUrl]
[![Serilog][Serilog]][SerilogUrl] ![Serilog.Expressions] ![Serilog.Sinks.Console] ![Serilog.Sinks.File]
[![XSNotifications][XSNotifications]][XSNotificationsUrl]
-[![CoreOSC][CoreOSC]][CoreOSCUrl]
+[![CoreOSC][CoreOSC]][CoreOSCUrl]
+[![System.CommandLine][System.CommandLine]][System.CommandLineUrl] ![System.CommandLine.NamingConventionBinder]
## License
-Distributed under the MIT License. See [`LICENSE`][license-url] for more information.
+Distributed under the MIT License. See [`LICENSE`][license-url] for more information.
+Specific GPL-2.0 applies to [Paci](https://github.com/PaciStardust/HOSCY)'s code [in this file](https://github.com/MintLily/VRStartAssistant/blob/main/VRStartAssistant/Features/OscMedia.cs) (`OscMedia.cs`)
## Acknowledgments
@@ -96,10 +192,12 @@ Distributed under the MIT License. See [`LICENSE`][license-url] for more informa
[Rider]: https://img.shields.io/badge/Rider-000000?style=for-the-badge&logo=rider&logoColor=white
[RiderUrl]: https://jb.gg/OpenSourceSupport
-[CSharp]: https://img.shields.io/badge/DotNet%208-512BD4?style=for-the-badge&logo=csharp&logoColor=white
-[DotNetUrl]: https://dotnet.microsoft.com/en-us/download/dotnet/8.0
+[CSharp]: https://img.shields.io/badge/DotNet%209-512BD4?style=for-the-badge&logo=sharp&logoColor=white
+[DotNetUrl]: https://dotnet.microsoft.com/en-us/download/dotnet/9.0
[Sublime]: https://img.shields.io/badge/Sublime%20Text-FF9800?style=for-the-badge&logo=sublimetext&logoColor=white
[SublimeUrl]: https://www.sublimetext.com/
+[VisualStudio]: https://img.shields.io/badge/Visual%20Studio-463668?style=for-the-badge&logo=vs&logoColor=white
+[VisualStudioURL]: https://visualstudio.microsoft.com/
[AudioSwitcher]: https://img.shields.io/badge/AudioSwitcher-004880?style=for-the-badge&logo=nuget&logoColor=white
@@ -115,6 +213,9 @@ Distributed under the MIT License. See [`LICENSE`][license-url] for more informa
[XSNotificationsUrl]: https://www.nuget.org/packages/XSNotifications
[CoreOSC]: https://img.shields.io/badge/LucHeart.CoreOSC-004880?style=for-the-badge&logo=nuget&logoColor=white
[CoreOSCUrl]: https://www.nuget.org/packages/LucHeart.CoreOSC
+[System.CommandLine]: https://img.shields.io/badge/System.CommandLine-004880?style=for-the-badge&logo=nuget&logoColor=white
+[System.CommandLineUrl]: https://www.nuget.org/packages/System.CommandLine
+[System.CommandLine.NamingConventionBinder]: https://img.shields.io/badge/System.CommandLine.NamingConventionBinder-005a80?style=for-the-badge&logo=nuget&logoColor=white
[XSOverlaySteam]: https://store.steampowered.com/app/1173510/XSOverlay/
diff --git a/Resources/banner.png b/Resources/banner.png
index 34404c0..5fb3214 100644
Binary files a/Resources/banner.png and b/Resources/banner.png differ
diff --git a/Resources/banner.webp b/Resources/banner.webp
index 79faf14..b1a1d1f 100644
Binary files a/Resources/banner.webp and b/Resources/banner.webp differ
diff --git a/Resources/favicon.ico b/Resources/favicon.ico
new file mode 100644
index 0000000..8cc1c6d
Binary files /dev/null and b/Resources/favicon.ico differ
diff --git a/Resources/icon.ico b/Resources/icon.ico
deleted file mode 100644
index ca7bd0d..0000000
Binary files a/Resources/icon.ico and /dev/null differ
diff --git a/Resources/icon.png b/Resources/icon.png
new file mode 100644
index 0000000..e6370fd
Binary files /dev/null and b/Resources/icon.png differ
diff --git a/VRSASetup/VRSASetup.vdproj b/VRSASetup/VRSASetup.vdproj
new file mode 100644
index 0000000..51abfe5
--- /dev/null
+++ b/VRSASetup/VRSASetup.vdproj
@@ -0,0 +1,3453 @@
+"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:VRSASetup"
+"LanguageId" = "3:1033"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:1033"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+ "Hierarchy"
+ {
+ "Entry"
+ {
+ "MsmKey" = "8:_139EE54B7B8187FEEDD055BC5AA9EE48"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_16FAE24A7BC448D5A10418EA64884AB5"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1DEF7A57B9594F717C7912119B3E97A7"
+ "OwnerKey" = "8:_16FAE24A7BC448D5A10418EA64884AB5"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_21B2CDDCE985D2F1EDD2D5E3E0A52322"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_26D30DD1D84345BB9D20E63C3FC608B3"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2770B5545BFD43FFAE1861992B001699"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2C047B263D978E50513A063D74221C86"
+ "OwnerKey" = "8:_2770B5545BFD43FFAE1861992B001699"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2C047B263D978E50513A063D74221C86"
+ "OwnerKey" = "8:_D05685BDE5349D3DE6AD4FEA693137E6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2E1B111D4CCE4C608213DBBF6BAAF221"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_31B1794B49804392BE337BA7B272C07F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3217EF8C465780DB14658AC8471ABB72"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_355F184597F04270B8FCECD34CBD6F47"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_38CAE01924AE4371821633F700C368A7"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3940176F4929D8C94C00124A3223E34C"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3EB7B3137E22438E8EDCDF4E3987647F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3EF3A4853F864D0EBDADF0FF51B34F53"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3F03976008F748E6B6D34BC84060F141"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3FD0107DA6F799F9BE07F04947D7E023"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_438250319490A75308410B0F7C82FCBD"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4E667591A38C40A09A4250A2CED0AAFD"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "OwnerKey" = "8:_2E1B111D4CCE4C608213DBBF6BAAF221"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "OwnerKey" = "8:_75BE2190C87E4DC49F850EE7E0CB642B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "OwnerKey" = "8:_3FD0107DA6F799F9BE07F04947D7E023"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "OwnerKey" = "8:_61E29E120BF99A9D0208EB9B9CF4410C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_55C514027E6B7CE54DB42BF248A31718"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_583B9C373B3E4BF9A7E75B8A7A0266DB"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_593ABEA75EAB41BF8C137FB26BBA3BB5"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_60ADC44205334CDF985FB5207D70419F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_61E29E120BF99A9D0208EB9B9CF4410C"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_FF8B28E883F248E098194E6A379B4621"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_F3C25B3BEECEAC2B2704495C2E88B81E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_F34B60CB3AD6A5C54AA7F5653B7E95A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_FEC28FB7C5FCA1531E255D70814639D9"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_FB4E6E4113AA4266A8B0420DE3DDD433"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6B4C710BD976A964ECC560186041F6EF"
+ "OwnerKey" = "8:_4E667591A38C40A09A4250A2CED0AAFD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6DB73C2920049E56C93744EE27B83DA2"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_744E09DF91414625BE2E7BE7EB00B2A0"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7476E62620534F15AD9A60940307B25A"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_75BE2190C87E4DC49F850EE7E0CB642B"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7C6E08B06C69EE1296B4D83D8DCF6EC2"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_888300061D9E4CAF81DD0AE58541C61F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8A8036826F914608BE4EF911D264746A"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8AD991AA8612419880D858760E59EA1E"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8DFD0FF9B83447849646F3C74D1EC0F0"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_9EDCD0DD82D942BE85B2CBD1B7446E19"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A1CA483404CC6EF12FBF1E949D3FA0A4"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A344D848B68942BDB853599326F5450E"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A3A018AEE531E19485D5BD1D8697AE87"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A3E7BF60DCF0436BB41AFA456294A64C"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_ABD6357B49194305BF2BA9136892E9B5"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AEB12AF311114453BCA86B81C8F1E8C0"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AFB644063280C7778F99A789DAB5DAF4"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_BC1868B1198644A08ECB4BA642D0CC0F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C043A4E77AB94FD2A80F0724CB86BA45"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C109941E52BE7AB19A630B0321F62898"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C324F4A7045B47309891E927E234E17F"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C5146C422B097580A899A0D0A8DB0B7B"
+ "OwnerKey" = "8:_C5C848AFE64C7F8350FADD74C619D28A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C5146C422B097580A899A0D0A8DB0B7B"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C5C848AFE64C7F8350FADD74C619D28A"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D05685BDE5349D3DE6AD4FEA693137E6"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D871151046A16B64B088B5ACA0E2B0B7"
+ "OwnerKey" = "8:_888300061D9E4CAF81DD0AE58541C61F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D871151046A16B64B088B5ACA0E2B0B7"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D871151046A16B64B088B5ACA0E2B0B7"
+ "OwnerKey" = "8:_A3A018AEE531E19485D5BD1D8697AE87"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DC8AB4A6ECC8B270847BEEDB42F0BA14"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD87A68713BDBA2C78B923F45641AA0A"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DF33098FB2D7472DB9A73E03F9F82CD7"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E495A4B846DC31947C3BDE67D609D853"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E71B127A75353CA730C9A31DCB0FD234"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F34B60CB3AD6A5C54AA7F5653B7E95A6"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F3C25B3BEECEAC2B2704495C2E88B81E"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F51A5AB232444C5D8CFF8A0158B3B187"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F632FFBB297A91D5279FB96589E121A6"
+ "OwnerKey" = "8:_2E1B111D4CCE4C608213DBBF6BAAF221"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F632FFBB297A91D5279FB96589E121A6"
+ "OwnerKey" = "8:_61E29E120BF99A9D0208EB9B9CF4410C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F632FFBB297A91D5279FB96589E121A6"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FB4E6E4113AA4266A8B0420DE3DDD433"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FDA0BBF7713EECB7EF9A23AF89254196"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC28FB7C5FCA1531E255D70814639D9"
+ "OwnerKey" = "8:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FF8B28E883F248E098194E6A379B4621"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_D871151046A16B64B088B5ACA0E2B0B7"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_A3A018AEE531E19485D5BD1D8697AE87"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_5198F7EA9BFF09632602FC4956289D0E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_139EE54B7B8187FEEDD055BC5AA9EE48"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_FDA0BBF7713EECB7EF9A23AF89254196"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_C109941E52BE7AB19A630B0321F62898"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3217EF8C465780DB14658AC8471ABB72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_A1CA483404CC6EF12FBF1E949D3FA0A4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_21B2CDDCE985D2F1EDD2D5E3E0A52322"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_DD87A68713BDBA2C78B923F45641AA0A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_6DB73C2920049E56C93744EE27B83DA2"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3940176F4929D8C94C00124A3223E34C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_AFB644063280C7778F99A789DAB5DAF4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_C5C848AFE64C7F8350FADD74C619D28A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_C5146C422B097580A899A0D0A8DB0B7B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_DC8AB4A6ECC8B270847BEEDB42F0BA14"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_E495A4B846DC31947C3BDE67D609D853"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_438250319490A75308410B0F7C82FCBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_55C514027E6B7CE54DB42BF248A31718"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_ABD6357B49194305BF2BA9136892E9B5"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_888300061D9E4CAF81DD0AE58541C61F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ }
+ "Configurations"
+ {
+ "Debug"
+ {
+ "DisplayName" = "8:Debug"
+ "IsDebugOnly" = "11:TRUE"
+ "IsReleaseOnly" = "11:FALSE"
+ "OutputFilename" = "8:Debug\\VRSASetup.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+ {
+ "Enabled" = "11:TRUE"
+ "PromptEnabled" = "11:TRUE"
+ "PrerequisitesLocation" = "2:1"
+ "Url" = "8:"
+ "ComponentsUrl" = "8:"
+ "Items"
+ {
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2"
+ {
+ "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)"
+ "ProductCode" = "8:.NETFramework,Version=v4.7.2"
+ }
+ }
+ }
+ }
+ "Release"
+ {
+ "DisplayName" = "8:Release"
+ "IsDebugOnly" = "11:FALSE"
+ "IsReleaseOnly" = "11:TRUE"
+ "OutputFilename" = "8:..\\Build Setup\\VRStartAssistant v0.0.0 Installer.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+ {
+ "Enabled" = "11:TRUE"
+ "PromptEnabled" = "11:TRUE"
+ "PrerequisitesLocation" = "2:1"
+ "Url" = "8:"
+ "ComponentsUrl" = "8:"
+ "Items"
+ {
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2"
+ {
+ "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)"
+ "ProductCode" = "8:.NETFramework,Version=v4.7.2"
+ }
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.NetCore.DesktopRuntime.8.0.x64"
+ {
+ "Name" = "8:.NET Desktop Runtime 8.0.8 (x64)"
+ "ProductCode" = "8:Microsoft.NetCore.DesktopRuntime.8.0.x64"
+ }
+ }
+ }
+ }
+ }
+ "Deployable"
+ {
+ "CustomAction"
+ {
+ }
+ "DefaultFeature"
+ {
+ "Name" = "8:DefaultFeature"
+ "Title" = "8:"
+ "Description" = "8:"
+ }
+ "ExternalPersistence"
+ {
+ "LaunchCondition"
+ {
+ "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_4597584DDB4241A9A0D115001AB14CD9"
+ {
+ "Name" = "8:.NET Framework"
+ "Message" = "8:[VSDNETMSG]"
+ "FrameworkVersion" = "8:.NETFramework,Version=v4.7.2"
+ "AllowLaterVersions" = "11:FALSE"
+ "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=863262"
+ }
+ }
+ }
+ "File"
+ {
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_139EE54B7B8187FEEDD055BC5AA9EE48"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Xml.XPath.XDocument, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_139EE54B7B8187FEEDD055BC5AA9EE48"
+ {
+ "Name" = "8:System.Xml.XPath.XDocument.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Xml.XPath.XDocument.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_16FAE24A7BC448D5A10418EA64884AB5"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.Drawing.Common, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_16FAE24A7BC448D5A10418EA64884AB5"
+ {
+ "Name" = "8:System.Drawing.Common.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\System.Drawing.Common.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1DEF7A57B9594F717C7912119B3E97A7"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.Win32.SystemEvents, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_1DEF7A57B9594F717C7912119B3E97A7"
+ {
+ "Name" = "8:Microsoft.Win32.SystemEvents.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.Win32.SystemEvents.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_21B2CDDCE985D2F1EDD2D5E3E0A52322"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_21B2CDDCE985D2F1EDD2D5E3E0A52322"
+ {
+ "Name" = "8:System.Runtime.Serialization.Xml.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Runtime.Serialization.Xml.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_26D30DD1D84345BB9D20E63C3FC608B3"
+ {
+ "SourcePath" = "8:..\\Build Long\\VRStartAssistant.runtimeconfig.json"
+ "TargetName" = "8:VRStartAssistant.runtimeconfig.json"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2770B5545BFD43FFAE1861992B001699"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.Windows.SDK.NET, Version=10.0.22621.30, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_2770B5545BFD43FFAE1861992B001699"
+ {
+ "Name" = "8:Microsoft.Windows.SDK.NET.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Microsoft.Windows.SDK.NET.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2C047B263D978E50513A063D74221C86"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:WinRT.Runtime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=99ea127f02d97709, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_2C047B263D978E50513A063D74221C86"
+ {
+ "Name" = "8:WinRT.Runtime.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:WinRT.Runtime.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2E1B111D4CCE4C608213DBBF6BAAF221"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.NamingConventionBinder, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_2E1B111D4CCE4C608213DBBF6BAAF221"
+ {
+ "Name" = "8:System.CommandLine.NamingConventionBinder.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\System.CommandLine.NamingConventionBinder.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_31B1794B49804392BE337BA7B272C07F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=es, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_31B1794B49804392BE337BA7B272C07F"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\es\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_3930A848DE6647DEB0F3AA936A13C447"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3217EF8C465780DB14658AC8471ABB72"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Security.SecureString, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3217EF8C465780DB14658AC8471ABB72"
+ {
+ "Name" = "8:System.Security.SecureString.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Security.SecureString.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_355F184597F04270B8FCECD34CBD6F47"
+ {
+ "SourcePath" = "8:..\\Build Long\\VRStartAssistant.exe"
+ "TargetName" = "8:VRStartAssistant.exe"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_38CAE01924AE4371821633F700C368A7"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=tr, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_38CAE01924AE4371821633F700C368A7"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\tr\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C55910D37A84473C8AB3A369EEB81607"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3940176F4929D8C94C00124A3223E34C"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Net.Sockets, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3940176F4929D8C94C00124A3223E34C"
+ {
+ "Name" = "8:System.Net.Sockets.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Net.Sockets.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3EB7B3137E22438E8EDCDF4E3987647F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=cs, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3EB7B3137E22438E8EDCDF4E3987647F"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\cs\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_8316A0D552154EF6ABE0477F31B84B02"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3EF3A4853F864D0EBDADF0FF51B34F53"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.Win32.SystemEvents, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3EF3A4853F864D0EBDADF0FF51B34F53"
+ {
+ "Name" = "8:Microsoft.Win32.SystemEvents.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Microsoft.Win32.SystemEvents.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3F03976008F748E6B6D34BC84060F141"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:WinRT.Runtime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=99ea127f02d97709, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3F03976008F748E6B6D34BC84060F141"
+ {
+ "Name" = "8:WinRT.Runtime.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\WinRT.Runtime.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3FD0107DA6F799F9BE07F04947D7E023"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:XSNotifications, Version=0.1.2.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3FD0107DA6F799F9BE07F04947D7E023"
+ {
+ "Name" = "8:XSNotifications.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:XSNotifications.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_438250319490A75308410B0F7C82FCBD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Diagnostics.StackTrace, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_438250319490A75308410B0F7C82FCBD"
+ {
+ "Name" = "8:System.Diagnostics.StackTrace.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Diagnostics.StackTrace.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4E667591A38C40A09A4250A2CED0AAFD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Sinks.Console, Version=6.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_4E667591A38C40A09A4250A2CED0AAFD"
+ {
+ "Name" = "8:Serilog.Sinks.Console.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Serilog.Sinks.Console.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5198F7EA9BFF09632602FC4956289D0E"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_5198F7EA9BFF09632602FC4956289D0E"
+ {
+ "Name" = "8:netstandard.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:netstandard.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_55C514027E6B7CE54DB42BF248A31718"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Data.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_55C514027E6B7CE54DB42BF248A31718"
+ {
+ "Name" = "8:System.Data.Common.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Data.Common.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_583B9C373B3E4BF9A7E75B8A7A0266DB"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=it, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_583B9C373B3E4BF9A7E75B8A7A0266DB"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\it\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_61517F7CDA9D403EB681A799A8B247B7"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_593ABEA75EAB41BF8C137FB26BBA3BB5"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=pt-BR, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_593ABEA75EAB41BF8C137FB26BBA3BB5"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\pt-BR\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_D5558BD4A37F4684A2F194896C4D4641"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_60ADC44205334CDF985FB5207D70419F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:LucHeart.CoreOSC, Version=1.4.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_60ADC44205334CDF985FB5207D70419F"
+ {
+ "Name" = "8:LucHeart.CoreOSC.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\LucHeart.CoreOSC.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_61E29E120BF99A9D0208EB9B9CF4410C"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.NamingConventionBinder, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_61E29E120BF99A9D0208EB9B9CF4410C"
+ {
+ "Name" = "8:System.CommandLine.NamingConventionBinder.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.CommandLine.NamingConventionBinder.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6B4C710BD976A964ECC560186041F6EF"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_6B4C710BD976A964ECC560186041F6EF"
+ {
+ "Name" = "8:Serilog.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Serilog.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6DB73C2920049E56C93744EE27B83DA2"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_6DB73C2920049E56C93744EE27B83DA2"
+ {
+ "Name" = "8:System.Runtime.InteropServices.RuntimeInformation.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Runtime.InteropServices.RuntimeInformation.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_744E09DF91414625BE2E7BE7EB00B2A0"
+ {
+ "SourcePath" = "8:..\\Build Long\\icon.png"
+ "TargetName" = "8:icon.png"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7476E62620534F15AD9A60940307B25A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_7476E62620534F15AD9A60940307B25A"
+ {
+ "Name" = "8:System.CommandLine.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\System.CommandLine.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_75BE2190C87E4DC49F850EE7E0CB642B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:XSNotifications, Version=0.1.2.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_75BE2190C87E4DC49F850EE7E0CB642B"
+ {
+ "Name" = "8:XSNotifications.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\XSNotifications.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7C6E08B06C69EE1296B4D83D8DCF6EC2"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:RestSharp, Version=112.1.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_7C6E08B06C69EE1296B4D83D8DCF6EC2"
+ {
+ "Name" = "8:RestSharp.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:RestSharp.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_888300061D9E4CAF81DD0AE58541C61F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:AudioSwitcher.AudioApi.CoreAudio, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_888300061D9E4CAF81DD0AE58541C61F"
+ {
+ "Name" = "8:AudioSwitcher.AudioApi.CoreAudio.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\AudioSwitcher.AudioApi.CoreAudio.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8A8036826F914608BE4EF911D264746A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=ru, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_8A8036826F914608BE4EF911D264746A"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\ru\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_DEF5FF1C076A4B4FB719A47531466BD3"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8AD991AA8612419880D858760E59EA1E"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=ko, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_8AD991AA8612419880D858760E59EA1E"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\ko\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_730C710DB80C4B2E9F38B225D3F76813"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8DFD0FF9B83447849646F3C74D1EC0F0"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=de, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_8DFD0FF9B83447849646F3C74D1EC0F0"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\de\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_D31AAC52405D4B14A7E44DCBB1E1714D"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:VRStartAssistant, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8b5c13b436fb9123, processorArchitecture=AMD64"
+ "ScatterAssemblies"
+ {
+ "_9C3D8CA62E5441D28A763AA1AEEFD12C"
+ {
+ "Name" = "8:VRStartAssistant.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\VRStartAssistant.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9EDCD0DD82D942BE85B2CBD1B7446E19"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_9EDCD0DD82D942BE85B2CBD1B7446E19"
+ {
+ "Name" = "8:Serilog.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Serilog.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A1CA483404CC6EF12FBF1E949D3FA0A4"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Security.Cryptography.Algorithms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_A1CA483404CC6EF12FBF1E949D3FA0A4"
+ {
+ "Name" = "8:System.Security.Cryptography.Algorithms.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Security.Cryptography.Algorithms.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A344D848B68942BDB853599326F5450E"
+ {
+ "SourcePath" = "8:..\\Build Long\\favicon.ico"
+ "TargetName" = "8:favicon.ico"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A3A018AEE531E19485D5BD1D8697AE87"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:AudioSwitcher.AudioApi.CoreAudio, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_A3A018AEE531E19485D5BD1D8697AE87"
+ {
+ "Name" = "8:AudioSwitcher.AudioApi.CoreAudio.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:AudioSwitcher.AudioApi.CoreAudio.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A3E7BF60DCF0436BB41AFA456294A64C"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=fr, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_A3E7BF60DCF0436BB41AFA456294A64C"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\fr\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_B1853CE4305048049FB5BC6A24E1F6DD"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_ABD6357B49194305BF2BA9136892E9B5"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:AudioSwitcher.AudioApi, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_ABD6357B49194305BF2BA9136892E9B5"
+ {
+ "Name" = "8:AudioSwitcher.AudioApi.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\AudioSwitcher.AudioApi.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AEB12AF311114453BCA86B81C8F1E8C0"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=pl, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_AEB12AF311114453BCA86B81C8F1E8C0"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\pl\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_7ADBFE3ADD494EC2AFC17B64C9E97F85"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AFB644063280C7778F99A789DAB5DAF4"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_AFB644063280C7778F99A789DAB5DAF4"
+ {
+ "Name" = "8:System.Net.Http.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Net.Http.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BC1868B1198644A08ECB4BA642D0CC0F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=ja, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_BC1868B1198644A08ECB4BA642D0CC0F"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\ja\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_035B59871FA647BA93FE5537FFFC141E"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C043A4E77AB94FD2A80F0724CB86BA45"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:RestSharp, Version=112.1.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C043A4E77AB94FD2A80F0724CB86BA45"
+ {
+ "Name" = "8:RestSharp.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\RestSharp.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C109941E52BE7AB19A630B0321F62898"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Threading.Overlapped, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C109941E52BE7AB19A630B0321F62898"
+ {
+ "Name" = "8:System.Threading.Overlapped.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Threading.Overlapped.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C324F4A7045B47309891E927E234E17F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=zh-Hans, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C324F4A7045B47309891E927E234E17F"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\zh-Hans\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_E2211D4E39DC44B9A6DBB7F31353AB6C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C5146C422B097580A899A0D0A8DB0B7B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C5146C422B097580A899A0D0A8DB0B7B"
+ {
+ "Name" = "8:System.IO.Compression.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.IO.Compression.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C5C848AFE64C7F8350FADD74C619D28A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C5C848AFE64C7F8350FADD74C619D28A"
+ {
+ "Name" = "8:System.IO.Compression.FileSystem.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.IO.Compression.FileSystem.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D05685BDE5349D3DE6AD4FEA693137E6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.Windows.SDK.NET, Version=10.0.22621.30, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_D05685BDE5349D3DE6AD4FEA693137E6"
+ {
+ "Name" = "8:Microsoft.Windows.SDK.NET.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.Windows.SDK.NET.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D871151046A16B64B088B5ACA0E2B0B7"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:AudioSwitcher.AudioApi, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_D871151046A16B64B088B5ACA0E2B0B7"
+ {
+ "Name" = "8:AudioSwitcher.AudioApi.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:AudioSwitcher.AudioApi.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DC8AB4A6ECC8B270847BEEDB42F0BA14"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Globalization.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_DC8AB4A6ECC8B270847BEEDB42F0BA14"
+ {
+ "Name" = "8:System.Globalization.Extensions.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Globalization.Extensions.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DD87A68713BDBA2C78B923F45641AA0A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Runtime.Serialization.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_DD87A68713BDBA2C78B923F45641AA0A"
+ {
+ "Name" = "8:System.Runtime.Serialization.Primitives.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Runtime.Serialization.Primitives.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DF33098FB2D7472DB9A73E03F9F82CD7"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine.resources, Version=2.0.0.0, Culture=zh-Hant, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_DF33098FB2D7472DB9A73E03F9F82CD7"
+ {
+ "Name" = "8:System.CommandLine.resources.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\zh-Hant\\System.CommandLine.resources.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_8E23DCD72A5647328DF753968A13C01F"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E495A4B846DC31947C3BDE67D609D853"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_E495A4B846DC31947C3BDE67D609D853"
+ {
+ "Name" = "8:System.Diagnostics.Tracing.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Diagnostics.Tracing.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E71B127A75353CA730C9A31DCB0FD234"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:LucHeart.CoreOSC, Version=1.4.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_E71B127A75353CA730C9A31DCB0FD234"
+ {
+ "Name" = "8:LucHeart.CoreOSC.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:LucHeart.CoreOSC.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F34B60CB3AD6A5C54AA7F5653B7E95A6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Sinks.Console, Version=6.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_F34B60CB3AD6A5C54AA7F5653B7E95A6"
+ {
+ "Name" = "8:Serilog.Sinks.Console.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Serilog.Sinks.Console.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F3C25B3BEECEAC2B2704495C2E88B81E"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Sinks.File, Version=6.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_F3C25B3BEECEAC2B2704495C2E88B81E"
+ {
+ "Name" = "8:Serilog.Sinks.File.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Serilog.Sinks.File.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F51A5AB232444C5D8CFF8A0158B3B187"
+ {
+ "SourcePath" = "8:..\\Build Long\\VRStartAssistant.deps.json"
+ "TargetName" = "8:VRStartAssistant.deps.json"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F632FFBB297A91D5279FB96589E121A6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.CommandLine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_F632FFBB297A91D5279FB96589E121A6"
+ {
+ "Name" = "8:System.CommandLine.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.CommandLine.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FB4E6E4113AA4266A8B0420DE3DDD433"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Sinks.File, Version=6.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FB4E6E4113AA4266A8B0420DE3DDD433"
+ {
+ "Name" = "8:Serilog.Sinks.File.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Serilog.Sinks.File.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FDA0BBF7713EECB7EF9A23AF89254196"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.ValueTuple, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FDA0BBF7713EECB7EF9A23AF89254196"
+ {
+ "Name" = "8:System.ValueTuple.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.ValueTuple.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FEC28FB7C5FCA1531E255D70814639D9"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Expressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FEC28FB7C5FCA1531E255D70814639D9"
+ {
+ "Name" = "8:Serilog.Expressions.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Serilog.Expressions.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FF8B28E883F248E098194E6A379B4621"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Serilog.Expressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FF8B28E883F248E098194E6A379B4621"
+ {
+ "Name" = "8:Serilog.Expressions.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:..\\Build Long\\Serilog.Expressions.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ }
+ "FileType"
+ {
+ }
+ "Folder"
+ {
+ "{3C67513D-01DD-4637-8A68-80971EB9504F}:_433D4BE294574DCA90C2047098346B38"
+ {
+ "DefaultLocation" = "8:[LocalAppDataFolder]\\Minty Labs\\VRStartAssistant"
+ "Name" = "8:#1925"
+ "AlwaysCreate" = "11:TRUE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:TARGETDIR"
+ "Folders"
+ {
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_B3BD725727664D93BABA5121CD07FD59"
+ {
+ "Name" = "8:Minty Labs"
+ "AlwaysCreate" = "11:TRUE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_D225AF44D9F84426A558F9C8648B1578"
+ "Folders"
+ {
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_53110E7250D44E268CB47B83866A2E00"
+ {
+ "Name" = "8:VRStartAssistant"
+ "AlwaysCreate" = "11:TRUE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_EF42F3E3DBAA484983B990B6970B9F88"
+ "Folders"
+ {
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_035B59871FA647BA93FE5537FFFC141E"
+ {
+ "Name" = "8:ja"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_66FB6AD0D3E8403FBA31397172EA788F"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_3930A848DE6647DEB0F3AA936A13C447"
+ {
+ "Name" = "8:es"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_1DAAF4FE3B8345FABCD45EF2B7ADC1AD"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_61517F7CDA9D403EB681A799A8B247B7"
+ {
+ "Name" = "8:it"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_61399CA1E7984EF08E8512F42B1B6A7A"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_730C710DB80C4B2E9F38B225D3F76813"
+ {
+ "Name" = "8:ko"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_6C586550BDFF4933861616ECA5641EA1"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_7ADBFE3ADD494EC2AFC17B64C9E97F85"
+ {
+ "Name" = "8:pl"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_C8A2FF98AFDA4837B2624C1BE21A6F50"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_8316A0D552154EF6ABE0477F31B84B02"
+ {
+ "Name" = "8:cs"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_46D8401565A94B1E9DE71B03DB42EF73"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_8E23DCD72A5647328DF753968A13C01F"
+ {
+ "Name" = "8:zh-Hant"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_0443B709AEB548668068254953E9949B"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_B1853CE4305048049FB5BC6A24E1F6DD"
+ {
+ "Name" = "8:fr"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_7B192279EABD442A8C0CBEF105301E3B"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_C55910D37A84473C8AB3A369EEB81607"
+ {
+ "Name" = "8:tr"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_8143919F3F4F412D9E5E1EE6AA187355"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_D31AAC52405D4B14A7E44DCBB1E1714D"
+ {
+ "Name" = "8:de"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_7A811656146C4F5699F079AE59AC34CE"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_D5558BD4A37F4684A2F194896C4D4641"
+ {
+ "Name" = "8:pt-BR"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_13FED35E467044AF8A4CB4AB424F07F3"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_DEF5FF1C076A4B4FB719A47531466BD3"
+ {
+ "Name" = "8:ru"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_9B449A9C25A743DBBD75E096813F75E9"
+ "Folders"
+ {
+ }
+ }
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_E2211D4E39DC44B9A6DBB7F31353AB6C"
+ {
+ "Name" = "8:zh-Hans"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_99D041B604864FB5B7D992F1DA2CA8AD"
+ "Folders"
+ {
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ "{1525181F-901A-416C-8A58-119130FE478E}:_5C075C4417F3499BA8C09C2D091634B8"
+ {
+ "Name" = "8:#1916"
+ "AlwaysCreate" = "11:TRUE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:DesktopFolder"
+ "Folders"
+ {
+ }
+ }
+ "{1525181F-901A-416C-8A58-119130FE478E}:_BBAE221CC533470982FA8ED942AB5027"
+ {
+ "Name" = "8:#1919"
+ "AlwaysCreate" = "11:TRUE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:ProgramMenuFolder"
+ "Folders"
+ {
+ }
+ }
+ }
+ "LaunchCondition"
+ {
+ }
+ "Locator"
+ {
+ }
+ "MsiBootstrapper"
+ {
+ "LangId" = "3:1033"
+ "RequiresElevation" = "11:FALSE"
+ }
+ "Product"
+ {
+ "Name" = "8:Microsoft Visual Studio"
+ "ProductName" = "8:VRStartAssistant"
+ "ProductCode" = "8:{BC95EFBD-3FE8-4A11-9572-DD9D83355607}"
+ "PackageCode" = "8:{81FEBAE9-547A-4059-873A-1CC7339D83A4}"
+ "UpgradeCode" = "8:{C49B9A18-E9DE-4756-90D2-A0975D2B503C}"
+ "AspNetVersion" = "8:2.0.50727.0"
+ "RestartWWWService" = "11:FALSE"
+ "RemovePreviousVersions" = "11:TRUE"
+ "DetectNewerInstalledVersion" = "11:TRUE"
+ "InstallAllUsers" = "11:FALSE"
+ "ProductVersion" = "8:2.0.03"
+ "Manufacturer" = "8:Minty Labs"
+ "ARPHELPTELEPHONE" = "8:"
+ "ARPHELPLINK" = "8:https://github.com/MintLily/VRStartAssistant/issues"
+ "Title" = "8:VRStartAssistant Setup"
+ "Subject" = "8:"
+ "ARPCONTACT" = "8:MintLily"
+ "Keywords" = "8:"
+ "ARPCOMMENTS" = "8:Setup installer for VRStartAssistant"
+ "ARPURLINFOABOUT" = "8:https://mintylabs.dev"
+ "ARPPRODUCTICON" = "8:"
+ "ARPIconIndex" = "3:0"
+ "SearchPath" = "8:"
+ "UseSystemSearchPath" = "11:TRUE"
+ "TargetPlatform" = "3:1"
+ "PreBuildEvent" = "8:"
+ "PostBuildEvent" = "8:"
+ "RunPostBuildEvent" = "3:0"
+ }
+ "Registry"
+ {
+ "HKLM"
+ {
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_2635A18DAD66464CB887FDBCB735D9CF"
+ {
+ "Name" = "8:Software"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8DA2E9166A4549A09B6860042BF15A01"
+ {
+ "Name" = "8:[Manufacturer]"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:TRUE"
+ "DeleteAtUninstall" = "11:TRUE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ }
+ "HKCU"
+ {
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6838248420754829AAD1418B692FE847"
+ {
+ "Name" = "8:Software"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A5EE6FF4FB3647B78B4CD595637E5E7F"
+ {
+ "Name" = "8:[Manufacturer]"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:TRUE"
+ "DeleteAtUninstall" = "11:TRUE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ }
+ "HKCR"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKU"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKPU"
+ {
+ "Keys"
+ {
+ }
+ }
+ }
+ "Sequences"
+ {
+ }
+ "Shortcut"
+ {
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_70E50272B6074E24A7EDE40EF3E23186"
+ {
+ "Name" = "8:VRStartAssistant"
+ "Arguments" = "8:"
+ "Description" = "8:"
+ "ShowCmd" = "3:1"
+ "IconIndex" = "3:0"
+ "Transitive" = "11:FALSE"
+ "Target" = "8:_355F184597F04270B8FCECD34CBD6F47"
+ "Folder" = "8:_BBAE221CC533470982FA8ED942AB5027"
+ "WorkingFolder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Icon" = "8:_A344D848B68942BDB853599326F5450E"
+ "Feature" = "8:"
+ }
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_D7809CE47AE74AB78A01D788D601BE53"
+ {
+ "Name" = "8:VRStartAssistant"
+ "Arguments" = "8:"
+ "Description" = "8:"
+ "ShowCmd" = "3:1"
+ "IconIndex" = "3:0"
+ "Transitive" = "11:FALSE"
+ "Target" = "8:_355F184597F04270B8FCECD34CBD6F47"
+ "Folder" = "8:_5C075C4417F3499BA8C09C2D091634B8"
+ "WorkingFolder" = "8:_53110E7250D44E268CB47B83866A2E00"
+ "Icon" = "8:_A344D848B68942BDB853599326F5450E"
+ "Feature" = "8:"
+ }
+ }
+ "UserInterface"
+ {
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0E9B54A393D642878314AB24DBD21785"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:2"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_01BA572CD545411D9FFDEB5A3396FCD3"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Finished"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2BF018547D5240EABB8728BD8E1B152B"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:1"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_01154E8AE9214858B8D9D7D3C72394CD"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:Confirm Installation"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_158476E5DC3841B590038E576E4908E1"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:Installation Folder"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "InstallAllUsersVisible"
+ {
+ "Name" = "8:InstallAllUsersVisible"
+ "DisplayName" = "8:#1059"
+ "Description" = "8:#1159"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:0"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E9D825F4B5DE4BB39B2132C3B5B18504"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Welcome"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_39AB4C0F90494754B9977FE1370334D4"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:2"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_427195F7B9754502981A064BD4EE5AA3"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:Installation Folder"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_446D668D56554101B293AD860D73245E"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:Confirm Installation"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_AB5C766FE0AE4AD8A55B0927FEEB0946"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Welcome"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_5373CA58C7564E42972595663486CAEF"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdBasicDialogs.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7F4478910E8F4EBCAA09C9A1FCC55ABB"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:1"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_59ABCAD623B6480889E4CF1B2712F77D"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Progress"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_F049E7BA754142B890F2A5947F813E9A"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:1"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2FEAA90816154A4ABC30C477B70BC55A"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Finished"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "UpdateText"
+ {
+ "Name" = "8:UpdateText"
+ "DisplayName" = "8:#1058"
+ "Description" = "8:#1158"
+ "Type" = "3:15"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:2"
+ "Value" = "8:Need Support? Go to https://github.com/MintLily/VRStartAssistant/issues"
+ "DefaultValue" = "8:#1258"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_F39161D287D242BC88D9E501C57F223E"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdUserInterface.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_F8B50D98636E417D97C3557FF7C0C38B"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:2"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2C5727F7751242D28F6F2D86051204DA"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Progress"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ }
+ "MergeModule"
+ {
+ }
+ "ProjectOutput"
+ {
+ }
+ }
+}
diff --git a/VRStartAssistant.sln b/VRStartAssistant.sln
index f3afd27..607d61a 100644
--- a/VRStartAssistant.sln
+++ b/VRStartAssistant.sln
@@ -1,16 +1,71 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRStartAssistant", "VRStartAssistant\VRStartAssistant.csproj", "{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}"
+# Visual Studio Version 17
+VisualStudioVersion = 17.11.35312.102
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VRStartAssistant", "VRStartAssistant\VRStartAssistant.csproj", "{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VRStartAssistantUI", "VRStartAssistantUI\VRStartAssistantUI.csproj", "{BA1FFB15-E3EC-40F4-A843-17A62C944D32}"
+EndProject
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "VRSASetup", "VRSASetup\VRSASetup.vdproj", "{1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}"
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
{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|x64.Build.0 = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Debug|x86.Build.0 = Debug|Any CPU
{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|ARM64.Build.0 = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|x64.ActiveCfg = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|x64.Build.0 = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|x86.ActiveCfg = Release|Any CPU
+ {888EE434-C2E8-4147-B4AC-6CD97F40ED1A}.Release|x86.Build.0 = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|x64.Build.0 = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Debug|x86.Build.0 = Debug|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|ARM64.Build.0 = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|x64.ActiveCfg = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|x64.Build.0 = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|x86.ActiveCfg = Release|Any CPU
+ {BA1FFB15-E3EC-40F4-A843-17A62C944D32}.Release|x86.Build.0 = Release|Any CPU
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Debug|Any CPU.ActiveCfg = Debug
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Debug|ARM64.ActiveCfg = Debug
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Debug|x64.ActiveCfg = Debug
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Debug|x86.ActiveCfg = Debug
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Release|Any CPU.ActiveCfg = Release
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Release|ARM64.ActiveCfg = Release
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Release|x64.ActiveCfg = Release
+ {1597EEE4-B5EF-488A-B4C3-DAEA4C1DB85F}.Release|x86.ActiveCfg = Release
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9E955757-2BFD-4D41-A4B2-7BC3CCC78A3E}
EndGlobalSection
EndGlobal
diff --git a/VRStartAssistant.sln.DotSettings.user b/VRStartAssistant.sln.DotSettings.user
index c65f2b5..7135793 100644
--- a/VRStartAssistant.sln.DotSettings.user
+++ b/VRStartAssistant.sln.DotSettings.user
@@ -1,2 +1,6 @@
+ C:\Program Files\dotnet\sdk\8.0.402\MSBuild.dll
+ 4294967294
+ True
+ True
True
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/AdGoBye.cs b/VRStartAssistant/Apps/AdGoBye.cs
deleted file mode 100644
index 14df995..0000000
--- a/VRStartAssistant/Apps/AdGoBye.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-
-namespace VRStartAssistant.Apps;
-
-public class AdGoBye {
- public AdGoBye() => Logger.Information("Setting up module :: {Description}", "Removes things from within VRChat");
- private static readonly ILogger Logger = Log.ForContext(typeof(AdGoBye));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunAdGoBye) return;
- try {
- Processes.AdGoBye = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "adgobye");
- if (Processes.AdGoBye != null) {
- Logger.Information("AdGoBye is {0} with process ID {1}; not re-launching.", "already running", Processes.AdGoBye.Id);
- IsRunning = true;
- return;
- }
- }
- catch {/*ignore*/}
-
- try {
- Logger.Information("Starting AdGoBye...");
- // Process.Start(Path.Combine(Vars.BaseDir, "extras", "AGB", "AdGoBye.exe"));
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Vars.BaseDir, "extras", "AGB"),
- FileName = Path.Combine(Vars.BaseDir, "extras", "AGB", "AdGoBye.exe"),
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- await Task.Delay(TimeSpan.FromSeconds(1));
- Processes.AdGoBye = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "adgobye");
- IsRunning = true;
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start AdGoBye");
- }
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunAdGoBye) return;
- if (Processes.AdGoBye == null) return;
- Logger.Information("Closing AdGoBye...");
- Processes.AdGoBye.CloseMainWindow();
- Processes.AdGoBye.Kill();
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Vars.BaseDir, "extras", "AGB")))
- return;
- Logger.Information("AGB path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/HOSCY.cs b/VRStartAssistant/Apps/HOSCY.cs
deleted file mode 100644
index afa1d82..0000000
--- a/VRStartAssistant/Apps/HOSCY.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-
-namespace VRStartAssistant.Apps;
-
-public class HOSCY {
- public HOSCY() => Logger.Information("Setting up module :: {Description}", "Various OSC Things for VRChat");
- private static readonly ILogger Logger = Log.ForContext(typeof(HOSCY));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunHOSCY) return;
- try {
- Processes.HOSCY = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "HOSCY");
- if (Processes.HOSCY != null) {
- Logger.Information("HOSCY is {0} with process ID {1}; not re-launching.", "already running", Processes.HOSCY.Id);
- IsRunning = true;
- return;
- }
- }
- catch {/*ignore*/}
-
- try {
- Logger.Information("Starting HOSCY...");
- // Process.Start(Path.Combine(Vars.BaseDir, "extras", "HOSCY", "HOSCY.exe"));
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Vars.BaseDir, "extras", "HOSCY"),
- FileName = Path.Combine(Vars.BaseDir, "extras", "HOSCY VRChat Companion", "Hoscy.exe"),
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- await Task.Delay(TimeSpan.FromSeconds(1));
- Processes.HOSCY = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "HOSCY");
- IsRunning = true;
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start HOSCY");
- }
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunHOSCY) return;
- if (Processes.HOSCY == null) return;
- Logger.Information("Closing HOSCY...");
- Processes.HOSCY.CloseMainWindow();
- Processes.HOSCY.Kill();
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Vars.BaseDir, "extras", "HOSCY")))
- return;
- Logger.Information("HOSCY path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/HeartrateMonitor.cs b/VRStartAssistant/Apps/HeartrateMonitor.cs
deleted file mode 100644
index 1759617..0000000
--- a/VRStartAssistant/Apps/HeartrateMonitor.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-
-namespace VRStartAssistant.Apps;
-
-public class HeartrateMonitor {
- public HeartrateMonitor() => Logger.Information("Setting up module :: {Description}", "Removes things from within VRChat");
- private static readonly ILogger Logger = Log.ForContext(typeof(HeartrateMonitor));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunHeartRateOnStream) return;
- try {
- Processes.HeartRateOnStream = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "HeartRateOnStream");
- if (Processes.HeartRateOnStream != null) {
- Logger.Information("HeartRateOnStream-OSC is {0} with process ID {1}; not re-launching.", "already running", Processes.HeartRateOnStream.Id);
- IsRunning = true;
- return;
- }
- }
- catch {/*ignore*/}
-
- try {
- Logger.Information("Starting HeartRateOnStream-OSC...");
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Vars.BaseDir, "extras", "AGB"),
- FileName = Path.Combine(Vars.BaseDir, "extras", "HROS", "HeartRateOnStream-OSC.exe"),
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- await Task.Delay(TimeSpan.FromSeconds(1));
- Processes.HeartRateOnStream = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "heartrateonstream-osc");
- IsRunning = true;
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start HeartRateOnStream-OSC");
- }
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunHeartRateOnStream) return;
- if (Processes.HeartRateOnStream == null) return;
- Logger.Information("Closing HeartRateOnStream-OSC...");
- Processes.HeartRateOnStream.CloseMainWindow();
- Processes.HeartRateOnStream.Kill();
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Vars.BaseDir, "extras", "HROS")))
- return;
- Logger.Information("HeartRateOnStream-OSC path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/OSCLeash.cs b/VRStartAssistant/Apps/OSCLeash.cs
deleted file mode 100644
index c6a47b8..0000000
--- a/VRStartAssistant/Apps/OSCLeash.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-using VRStartAssistant.Utils;
-
-namespace VRStartAssistant.Apps;
-
-public class OSCLeash {
- public OSCLeash() => Logger.Information("Setting up module :: {Description}", "Space Drag via OSC");
- private static readonly ILogger Logger = Log.ForContext(typeof(OSCLeash));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunOscLeash) return;
- try {
- Processes.OSCLeash = Process.GetProcesses().Where(p => p.ProcessName.Contains("OSCLeash", StringComparison.CurrentCultureIgnoreCase)).ToList();
- if (Processes.OSCLeash.Count != 0) {
- Logger.Information("OSCLeash is {0} with process ID {1}; not re-launching.", "already running", Processes.OSCLeash.First().Id);
- IsRunning = true;
- return;
- }
- }
- catch {/*ignore*/}
-
- try {
- Logger.Information("Starting OSCLeash...");
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Vars.BaseDir, "extras", "OSCLeash"),
- FileName = Path.Combine(Vars.BaseDir, "extras", "OSCLeash", "OSCLeash.exe"),
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- GetOscLeashProcesses().RunWithoutAwait();
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start OSCLeash");
- }
- }
-
- private static async Task GetOscLeashProcesses() {
- await Task.Delay(TimeSpan.FromSeconds(30));
- Processes.OSCLeash = Process.GetProcesses().Where(p => p.ProcessName.Contains("OSCLeash", StringComparison.CurrentCultureIgnoreCase)).ToList();
- Logger.Debug("Got OSCLeash Processes: {0}", Processes.OSCLeash.Count);
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunOscLeash) return;
- if (Processes.OSCLeash.Count == 0) return;
- Logger.Information("Closing OSCLeash...");
- foreach (var oscLeash in Processes.OSCLeash) {
- oscLeash.CloseMainWindow();
- oscLeash.Kill();
- }
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Vars.BaseDir, "extras", "OSCLeash")))
- return;
- Logger.Information("OSCLeash path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/SteamVR.cs b/VRStartAssistant/Apps/SteamVR.cs
deleted file mode 100644
index 55dbb75..0000000
--- a/VRStartAssistant/Apps/SteamVR.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-using VRStartAssistant.Features;
-using VRStartAssistant.Features.Integrations;
-
-namespace VRStartAssistant.Apps;
-
-public class SteamVR {
- public SteamVR() => Logger.Information("Setting up module :: {Description}", "Starts SteamVR");
- private static readonly ILogger Logger = Log.ForContext(typeof(SteamVR));
- public static bool IsRunning;
-
- public static async Task StartAsync() {
- if (IsRunning) return;
- Logger.Information("Starting SteamVR...");
- Process.Start(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "steam.exe"), "steam://rungameid/250820");
- try {
- Processes.SteamVrProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrserver");
- IsRunning = true;
- if (Processes.SteamVrProcess != null) {
- Logger.Information("SteamVR is {0} with process ID {1}; not re-launching.", "already running", Processes.SteamVrProcess.Id);
- Logger.Information("SteamVR detected. This {0} will close when SteamVR closes...", Vars.AppName);
- await Task.Delay(TimeSpan.FromSeconds(2));
- await VRChat.Start();
- return;
- }
- }
- catch {/*ignore*/}
-
- Logger.Information("Waiting 5 seconds for SteamVR to fully start...");
- await Task.Delay(TimeSpan.FromSeconds(5));
- try {
- Logger.Information("Attempting to detect SteamVR...");
- Processes.SteamVrProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrserver");
- IsRunning = true;
- if (Processes.SteamVrProcess != null/* && Processes.SteamVrProcess.ProcessName.ToLower() == "vrserver"*/)
- Logger.Information("SteamVR detected. This {0} will close when SteamVR closes...", Vars.AppName);
- else
- Logger.Warning("SteamVR was {0}. Auto-Close with SteamVR is disabled. {1}", "not detected", "Please start this program after SteamVR has started.");
- }
- catch {
- // ignored
- }
-
- await Task.Delay(TimeSpan.FromSeconds(2));
- await VRChat.Start();
- }
-
- public static async Task Exit() {
- if (Processes.SteamVrProcess == null) return;
- Logger.Information("SteamVR has exited."/*" Exiting in 2 seconds..."*/);
- // await Task.Delay(TimeSpan.FromSeconds(2));
- // if (WindowsXSO.NotificationThread.IsAlive)
- // WindowsXSO.NotificationThread.Abort();
- // WindowsXSO.run = false;
- OscMedia.StopMediaDetection();
- await HASS.ToggleBaseStations(true);
- Process.GetCurrentProcess().Kill();
- Environment.Exit(0);
- }
-
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/VRCVideoCacher.cs b/VRStartAssistant/Apps/VRCVideoCacher.cs
deleted file mode 100644
index 438c06e..0000000
--- a/VRStartAssistant/Apps/VRCVideoCacher.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-
-namespace VRStartAssistant.Apps;
-
-public class VRCVideoCacher {
- public VRCVideoCacher() => Logger.Information("Setting up module :: {Description}", "Starts VRCVideoCacher");
- private static readonly ILogger Logger = Log.ForContext(typeof(VRCVideoCacher));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunVrcVideoCacher) return;
- try {
- Processes.VrcVideoCacher = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrcvideocacher");
- IsRunning = true;
- if (Processes.VrcVideoCacher != null) {
- Logger.Information("VRCVideoCacher is {0} with process ID {1}; not re-launching.", "already running", Processes.VrcVideoCacher.Id);
- return;
- }
- }
- catch {/*ignore*/}
- Logger.Information("Starting VRCVideoCacher...");
- // Process.Start(Path.Combine(Vars.BaseDir, "extras", "VRCVideoCacher", "VRCVideoCacher.exe"));
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Vars.BaseDir, "extras", "VRCVideoCacher"),
- FileName = Path.Combine(Vars.BaseDir, "extras", "VRCVideoCacher", "VRCVideoCacher.exe"),
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- await Task.Delay(TimeSpan.FromSeconds(1));
- Processes.VrcVideoCacher = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrcvideocacher");
- IsRunning = true;
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunVrcVideoCacher) return;
- if (Processes.VrcVideoCacher == null) return;
- Logger.Information("Closing VRCVideoCacher...");
- Processes.VrcVideoCacher.CloseMainWindow();
- Processes.VrcVideoCacher.Kill();
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Vars.BaseDir, "extras", "VRCVideoCacher")))
- return;
- Logger.Information("VRCVideoCacher path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/VRCX.cs b/VRStartAssistant/Apps/VRCX.cs
deleted file mode 100644
index 683e054..0000000
--- a/VRStartAssistant/Apps/VRCX.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-using VRStartAssistant.Utils;
-
-namespace VRStartAssistant.Apps;
-
-public class VRCX {
- public VRCX() => Logger.Information("Setting up module :: {Description}", "Starts VRCX");
- private static readonly ILogger Logger = Log.ForContext(typeof(VRCX));
- public static bool IsRunning;
-
- public static void Start() {
- if (IsRunning) return;
- try {
- Processes.VrcxProcesses = Process.GetProcesses().Where(p => p.ProcessName.Contains("vrcx", StringComparison.CurrentCultureIgnoreCase)).ToList();
- if (Processes.VrcxProcesses.Count != 0) {
- Logger.Information("VRCX is {0} with process ID {1}; not re-launching.", "already running", Processes.VrcxProcesses.First().Id);
- IsRunning = true;
- return;
- }
- }
- catch {/*ignore*/}
-
- Logger.Information("Starting VRCX...");
- Process.Start(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "VRCX", "VRCX.exe"));
- IsRunning = true;
- GetVrcxProcesses().RunWithoutAwait();
- }
-
- public static void Exit() {
- if (Processes.VrcxProcesses.Count == 0) return;
- Logger.Information("Closing VRCX...");
- foreach (var vrcx in Processes.VrcxProcesses) {
- vrcx.CloseMainWindow();
- vrcx.Kill();
- }
- }
-
- private static async Task GetVrcxProcesses() {
- await Task.Delay(TimeSpan.FromSeconds(30));
- Processes.VrcxProcesses = Process.GetProcesses().Where(p => p.ProcessName.Contains("vrcx", StringComparison.CurrentCultureIgnoreCase)).ToList();
- Logger.Debug("Got VRCX Processes: {0}", Processes.VrcxProcesses.Count);
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/VRChat.cs b/VRStartAssistant/Apps/VRChat.cs
deleted file mode 100644
index 15244c6..0000000
--- a/VRStartAssistant/Apps/VRChat.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-using VRStartAssistant.Features;
-using VRStartAssistant.Secret;
-
-namespace VRStartAssistant.Apps;
-
-public class VRChat {
- public VRChat() => Logger.Information("Setting up module :: {Description}", "Starts and Minimizes VRChat");
- private static readonly ILogger Logger = Log.ForContext(typeof(VRChat));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- Logger.Information("Starting VRChat...");
- Process.Start(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "steam.exe"), "steam://rungameid/438100");
- IsRunning = true;
- await Task.Delay(TimeSpan.FromSeconds(5));
- AudioSwitch.Start();
- Logger.Information("Waiting 15 seconds for VRChat to fully start...");
- await Task.Delay(TimeSpan.FromSeconds(15));
-
- Logger.Information("Attempting to detect VRChat...");
- Processes.VrChatProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrchat");
- if (Processes.VrChatProcess == null) {
- Logger.Warning("VRChat was {0}. Game will not minimize.", "not detected");
- return;
- }
-
- try {
- await VRCVideoCacher.Start();
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start VRCVideoCacher");
- }
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Apps/VRChatOscRouter.cs b/VRStartAssistant/Apps/VRChatOscRouter.cs
deleted file mode 100644
index 182f283..0000000
--- a/VRStartAssistant/Apps/VRChatOscRouter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System.Diagnostics;
-using Serilog;
-
-namespace VRStartAssistant.Apps;
-
-public class VRChatOscRouter {
- public VRChatOscRouter() => Logger.Information("Setting up module :: {Description}", "Port router manager for VRChat");
- private static readonly ILogger Logger = Log.ForContext(typeof(VRChatOscRouter));
- public static bool IsRunning;
-
- public static async Task Start() {
- if (IsRunning) return;
- if (!Program.ConfigurationInstance.Base.RunVRChatOSCRouter) return;
- try {
- Processes.Vor = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vor");
- if (Processes.Vor != null) {
- Logger.Information("VRChat OSC Router is {0} with process ID {1}; not re-launching.", "already running", Processes.Vor.Id);
- IsRunning = true;
- return;
- }
- }
- catch { /*ignore*/
- }
-
- try {
- Logger.Information("Starting VRChat OSC Router...");
- Process.Start(new ProcessStartInfo {
- WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "vor", "bin"),
- FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "vor", "bin", "vor.exe"),
- Arguments = "--enable-on-start / -e",
- CreateNoWindow = false,
- WindowStyle = ProcessWindowStyle.Minimized,
- UseShellExecute = true
- });
- await Task.Delay(TimeSpan.FromSeconds(1));
- Processes.Vor = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vor");
- IsRunning = true;
- }
- catch (Exception ex) {
- Logger.Error(ex, "Failed to start VRChat OSC Router");
- }
- }
-
- public static void Exit() {
- if (!Program.ConfigurationInstance.Base.RunVRChatOSCRouter) return;
- if (Processes.Vor == null) return;
- Logger.Information("Closing VRChat OSC Router...");
- Processes.Vor.CloseMainWindow();
- Processes.Vor.Kill();
- }
-
- public static void ValidatePath() {
- if (!Directory.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "vor", "bin")))
- return;
- Logger.Information("VRChat OSC Router path is valid.");
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/Audio.cs b/VRStartAssistant/Configuration/Classes/Audio.cs
index 07efa9a..369ed95 100644
--- a/VRStartAssistant/Configuration/Classes/Audio.cs
+++ b/VRStartAssistant/Configuration/Classes/Audio.cs
@@ -4,6 +4,7 @@ namespace VRStartAssistant.Configuration.Classes;
public class Audio {
public int DefaultAudioDevice { get; init; } = 0;
+ public bool ApplyAllDevicesToList { get; set; } = false;
public List AudioDevices { get; init; } = [];
public int SwitchBackAudioDevice { get; init; } = 0;
}
diff --git a/VRStartAssistant/Configuration/Classes/Base.cs b/VRStartAssistant/Configuration/Classes/Base.cs
index e546b1c..9a9ad0d 100644
--- a/VRStartAssistant/Configuration/Classes/Base.cs
+++ b/VRStartAssistant/Configuration/Classes/Base.cs
@@ -1,16 +1,12 @@
-namespace VRStartAssistant.Configuration.Classes;
+using System.Text.Json.Serialization;
+
+namespace VRStartAssistant.Configuration.Classes;
public class Base {
public int ConfigVersion { get; set; } = Vars.TargetConfigVersion;
+ public VR VR { get; init; } = new();
public Audio Audio { get; init; } = new();
- public WinXSO WinXSO { get; init; } = new();
public HASS HASS { get; init; } = new();
public OscThings OscThings { get; init; } = new();
- public bool RunSecretApp1 { get; init; } = false;
- public bool RunVrcVideoCacher { get; init; } = false;
- public bool RunAdGoBye { get; init; } = false;
- public bool RunHOSCY { get; init; } = false;
- public bool RunHeartRateOnStream { get; init; } = false;
- public bool RunOscLeash { get; init; } = false;
- public bool RunVRChatOSCRouter { get; init; } = false;
+ public List Programs { get; init; } = [];
}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/Games.cs b/VRStartAssistant/Configuration/Classes/Games.cs
new file mode 100644
index 0000000..2c8be0b
--- /dev/null
+++ b/VRStartAssistant/Configuration/Classes/Games.cs
@@ -0,0 +1,5 @@
+namespace VRStartAssistant.Configuration.Classes;
+
+public class Games {
+
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/HASS.cs b/VRStartAssistant/Configuration/Classes/HASS.cs
index 39c73eb..0d815f7 100644
--- a/VRStartAssistant/Configuration/Classes/HASS.cs
+++ b/VRStartAssistant/Configuration/Classes/HASS.cs
@@ -3,10 +3,10 @@
public class HASS {
public string Host { get; init; } = "";
public string Token { get; init; } = "";
- public List BaseStationEntityIds { get; init; } = new();
+ public bool ControlSwitches { get; init; } = true;
+ public List ToggleSwitchEntityIds { get; init; } = [];
public bool ControlLights { get; init; } = true;
- public List HueLightEntityIds { get; init; } = new();
- public List ExtraHueLightEntityIds { get; init; } = new();
+ public List LightEntityIds { get; init; } = [];
public float LightBrightness { get; init; } = 0.0f;
public float[] LightColor { get; init; } = [255f, 255f, 255f];
}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/OscThings.cs b/VRStartAssistant/Configuration/Classes/OscThings.cs
index ba208f4..37a28a9 100644
--- a/VRStartAssistant/Configuration/Classes/OscThings.cs
+++ b/VRStartAssistant/Configuration/Classes/OscThings.cs
@@ -3,8 +3,9 @@
public class OscThings {
public int ListeningPort { get; init; } = 9000;
public int SendingPort { get; init; } = 9001;
- public bool ShowMediaStatus { get; init; } = true;
+ public bool ShowMediaStatus { get; init; } = false;
+ public bool ForceStartMediaStatus { get; init; } = false;
public List CustomBlockWordsContains { get; init; } = [];
public List CustomBlockWordsEquals { get; init; } = [];
- public int SecondToAutoHideChatBox { get; init; } = 2;
+ public int SecondsToAutoHideChatBox { get; init; } = 2;
}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/Programs.cs b/VRStartAssistant/Configuration/Classes/Programs.cs
new file mode 100644
index 0000000..a582f82
--- /dev/null
+++ b/VRStartAssistant/Configuration/Classes/Programs.cs
@@ -0,0 +1,14 @@
+using System.Text.Json.Serialization;
+
+namespace VRStartAssistant.Configuration.Classes;
+
+public class Programs {
+ [JsonPropertyName("Name")] public string? Name { get; init; }
+ [JsonPropertyName("EXE Path")] public string? ExePath { get; init; }
+ [JsonPropertyName("Arguments")] public string? Arguments { get; init; }
+ [JsonPropertyName("Start With VRSA")] public bool StartWithVrsa { get; init; }
+ [JsonPropertyName("Start Minimized")] public bool StartMinimized { get; init; }
+ [JsonPropertyName("Has Multiple Processes")] public bool HasMultiProcesses { get; init; }
+ [JsonPropertyName("Process Name")] public string? ProcessName { get; init; }
+ [JsonPropertyName("Fallback Process Starting Needed")] public bool FallbackProcessStartingNeeded { get; init; }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/VR.cs b/VRStartAssistant/Configuration/Classes/VR.cs
new file mode 100644
index 0000000..2da61d3
--- /dev/null
+++ b/VRStartAssistant/Configuration/Classes/VR.cs
@@ -0,0 +1,8 @@
+using System.Text.Json.Serialization;
+
+namespace VRStartAssistant.Configuration.Classes;
+
+public class VR {
+ [JsonPropertyName("Launch With SteamVR")] public bool AutoLaunchWithSteamVr { get; init; }
+ [JsonPropertyName("hasRegistered (do not change)")] public bool HasRegistered { get; set; }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Classes/WinXSO.cs b/VRStartAssistant/Configuration/Classes/WinXSO.cs
deleted file mode 100644
index 917cabc..0000000
--- a/VRStartAssistant/Configuration/Classes/WinXSO.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace VRStartAssistant.Configuration.Classes;
-
-public class WinXSO {
- [JsonPropertyName("WindowsXSO Settings")] public Settings Settings { get; init; } = new();
-}
-
-public class Settings {
- [JsonPropertyName("Applications")] public List Applications { get; init; } = ["discord", "vesktop"];
- public bool Whitelist { get; init; } = true;
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Config.cs b/VRStartAssistant/Configuration/Config.cs
index a033dca..0232a51 100644
--- a/VRStartAssistant/Configuration/Config.cs
+++ b/VRStartAssistant/Configuration/Config.cs
@@ -2,40 +2,33 @@
using Serilog;
using VRStartAssistant.Configuration.Classes;
-namespace VRStartAssistant.Configuration;
+namespace VRStartAssistant.Configuration;
public class Config {
public Base? Base { get; private set; }
- private readonly ILogger _logger = Log.ForContext(typeof(Config));
+ private readonly ILogger _logger = Log.ForContext();
internal void Load() {
var hasFile = File.Exists("VRStartAssistant.config.json");
-
+
var defaultConfig = new Base {
ConfigVersion = Vars.TargetConfigVersion,
+ VR = new VR {
+ AutoLaunchWithSteamVr = false,
+ HasRegistered = false
+ },
Audio = new Audio {
DefaultAudioDevice = 0,
+ ApplyAllDevicesToList = false,
AudioDevices = [],
SwitchBackAudioDevice = 1
},
- WinXSO = new WinXSO {
- Settings = new Settings {
- Applications = [
- "discord",
- "discordptb",
- "discordcanary",
- "vesktop"
- ],
- Whitelist = true
- }
- },
HASS = new HASS {
Host = "http://127.0.0.1:8123/",
Token = "",
- BaseStationEntityIds = [""],
+ ToggleSwitchEntityIds = [""],
ControlLights = false,
- HueLightEntityIds = [""],
- ExtraHueLightEntityIds = [""],
+ LightEntityIds = [""],
LightBrightness = 0.0f,
LightColor = [0, 0, 0]
},
@@ -43,18 +36,25 @@ internal void Load() {
ListeningPort = 9001,
SendingPort = 9000,
ShowMediaStatus = false,
+ ForceStartMediaStatus = false,
CustomBlockWordsContains = [],
- CustomBlockWordsEquals = [],
- SecondToAutoHideChatBox = 2
+ CustomBlockWordsEquals = [ "Up next", "DJ X" ],
+ SecondsToAutoHideChatBox = 2
},
- RunSecretApp1 = true,
- RunVrcVideoCacher = false,
- RunAdGoBye = false,
- RunHOSCY = false,
- RunHeartRateOnStream = false,
- RunOscLeash = false
+ Programs = [
+ new Programs {
+ Name = "VRCX",
+ ExePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "VRCX", "VRCX.exe"),
+ Arguments = "",
+ StartWithVrsa = true,
+ StartMinimized = true,
+ HasMultiProcesses = true,
+ ProcessName = "vrcx",
+ FallbackProcessStartingNeeded = true
+ }
+ ]
};
-
+
bool update;
Base? config = null;
if (hasFile) {
@@ -63,21 +63,23 @@ internal void Load() {
if (config?.ConfigVersion == Vars.TargetConfigVersion) {
Base = config;
update = false;
- } else {
+ }
+ else {
update = true;
config!.ConfigVersion = Vars.TargetConfigVersion;
}
- } else {
+ }
+ else {
update = true;
}
-
+
var json = JsonSerializer.Serialize(config ?? defaultConfig, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText("VRStartAssistant.config.json", json);
_logger.Information("{0} VRStartAssistant.config.json", update ? "Updated" : hasFile ? "Loaded" : "Created");
Base = config ?? defaultConfig;
}
-
- // public void Save() => File.WriteAllText("VRStartAssistant.config.json", JsonSerializer.Serialize(Base, new JsonSerializerOptions { WriteIndented = true }));
-
+
+ public void Save() => File.WriteAllText("VRStartAssistant.config.json", JsonSerializer.Serialize(Base, new JsonSerializerOptions { WriteIndented = true }));
+
public string ToJson() => JsonSerializer.Serialize(Base, new JsonSerializerOptions { WriteIndented = true });
}
\ No newline at end of file
diff --git a/VRStartAssistant/Configuration/Other/vrappmanifest.cs b/VRStartAssistant/Configuration/Other/vrappmanifest.cs
new file mode 100644
index 0000000..f5a8f62
--- /dev/null
+++ b/VRStartAssistant/Configuration/Other/vrappmanifest.cs
@@ -0,0 +1,24 @@
+namespace VRStartAssistant.Configuration.Other;
+
+public class vrappmanifest {
+ public string source { get; set; }
+ public List applications { get; set; }
+}
+
+public class applications {
+ public string app_key { get; set; }
+ public string app_type { get; set; }
+ public string launch_type { get; set; }
+ public string binary_path_windows { get; set; }
+ public bool is_dashboard_overlay { get; set; }
+ public langs strings { get; set; }
+}
+
+public class langs {
+ public strings en_us { get; set; }
+}
+
+public class strings {
+ public string name { get; set; }
+ public string description { get; set; }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/Apps/ProgramManager.cs b/VRStartAssistant/Features/Apps/ProgramManager.cs
new file mode 100644
index 0000000..df04e01
--- /dev/null
+++ b/VRStartAssistant/Features/Apps/ProgramManager.cs
@@ -0,0 +1,108 @@
+using System.Diagnostics;
+using Serilog;
+
+namespace VRStartAssistant.Features.Apps;
+
+public class ProgramManager {
+ public ProgramManager() => Logger.Information("Setting up module :: {Description}", "Dynamically starts and stops programs based on the Configuration");
+ private static readonly ILogger Logger = Log.ForContext();
+
+ public static async Task StartApplications() {
+ var config = Program.ConfigurationInstance!.Base;
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Starting Applications...", "VERBOSE");
+
+ foreach (var item in config!.Programs.Where(item => item.StartWithVrsa)) {
+ if (string.IsNullOrWhiteSpace(item.Name))
+ continue;
+ if (item.HasMultiProcesses) {
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Checking for Pre-existing Multiple Processes", "VERBOSE");
+ Processes.MultiApplications[item.Name!] = Process.GetProcesses().Where(p => p.ProcessName.Contains(item.ProcessName!, StringComparison.CurrentCultureIgnoreCase)).ToList();
+ if (Processes.MultiApplications[item.Name!]?.Count is not 0) {
+ List ids = [];
+ Processes.MultiApplications[item.Name!]!.ForEach(x => ids.Add(x.Id));
+ Logger.Information("{Name} is {0} with {1} processes. [{2}]", item.Name, "already running", Processes.MultiApplications[item.Name!]!.Count, string.Join(", ", ids));
+ continue;
+ }
+ }
+ else {
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Checking for Pre-existing Single Process", "VERBOSE");
+ Processes.SingleApplications[item.Name!] = Process.GetProcesses().FirstOrDefault(p => p.ProcessName.Contains(item.ProcessName!, StringComparison.CurrentCultureIgnoreCase));
+ if (Processes.SingleApplications[item.Name!] is not null) {
+ Logger.Information("{Name} is {0} with process ID {1}; not re-launching.", item.Name, "already running", Processes.SingleApplications[item.Name!]!.Id);
+ continue;
+ }
+ }
+
+ Logger.Information("Starting {Name}...", item.Name);
+ if (item.FallbackProcessStartingNeeded)
+ Process.Start(item.ExePath!, item.Arguments!);
+ else {
+ try {
+ Process.Start(new ProcessStartInfo {
+ WorkingDirectory = Path.GetDirectoryName(item.ExePath),
+ FileName = item.ExePath,
+ Arguments = item.Arguments,
+ CreateNoWindow = false,
+ WindowStyle = item.StartMinimized ? ProcessWindowStyle.Minimized : ProcessWindowStyle.Normal,
+ UseShellExecute = true
+ });
+ }
+ catch (Exception ex) {
+ Logger.Error(ex, "Failed to start {Name}", item.Name);
+ }
+ }
+
+ await Task.Delay(TimeSpan.FromSeconds(1));
+ if (item.HasMultiProcesses) {
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Finding Multiple Processes", "VERBOSE");
+ Processes.MultiApplications[item.Name!] = Process.GetProcesses().Where(p => p.ProcessName.Contains(item.ProcessName!, StringComparison.CurrentCultureIgnoreCase)).ToList();
+ if (Processes.MultiApplications[item.Name!]?.Count is 0) continue;
+ List ids = [];
+ Processes.MultiApplications[item.Name!]!.ForEach(x => ids.Add(x.Id));
+ Logger.Information("{Name} has {0} with {1} processes. [{2}]", item.Name, "started", Processes.MultiApplications[item.Name!]!.Count, string.Join(", ", ids));
+ continue;
+ }
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Finding Single Process", "VERBOSE");
+ Processes.SingleApplications[item.Name!] = Process.GetProcesses().FirstOrDefault(p => p.ProcessName.Contains(item.ProcessName!, StringComparison.CurrentCultureIgnoreCase));
+ if (Processes.SingleApplications[item.Name!] == null) continue;
+ Logger.Information("{Name} has {0} with process ID {1}; not re-launching.", item.Name, "started", Processes.SingleApplications[item.Name!]!.Id);
+ }
+ }
+
+ public static void ExitApplications() {
+ var config = Program.ConfigurationInstance!.Base;
+
+ foreach (var item in config!.Programs.Where(item => !string.IsNullOrWhiteSpace(item.Name))) {
+ if (item.HasMultiProcesses) {
+ Processes.MultiApplications.TryGetValue(item.Name!, out var applications);
+ if (applications is null) continue;
+ Logger.Information("Closing {Name}...", item.Name);
+ foreach (var app in applications!) {
+ app.CloseMainWindow();
+ app.Kill();
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Killed {1}", "VERBOSE", item.Name);
+ }
+ continue;
+ }
+
+ Processes.SingleApplications.TryGetValue(item.Name!, out var application);
+ if (application is null) {
+ Logger.Information("{Name} is null and was not running.", item.Name);
+ continue;
+ }
+ Logger.Information("Closing {Name}...", item.Name);
+ if (Vars.Verbose)
+ Logger.Information("[{0}] ", "VERBOSE");
+ application.CloseMainWindow();
+ application.Kill();
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Killed {1}", "VERBOSE", item.Name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/Apps/SteamVR.cs b/VRStartAssistant/Features/Apps/SteamVR.cs
new file mode 100644
index 0000000..ef4a7ab
--- /dev/null
+++ b/VRStartAssistant/Features/Apps/SteamVR.cs
@@ -0,0 +1,94 @@
+using System.Diagnostics;
+using System.Text.Json;
+using Serilog;
+using VRStartAssistant.Configuration.Other;
+
+namespace VRStartAssistant.Features.Apps;
+
+public class SteamVR {
+ public SteamVR() => Logger.Information("Setting up module :: {Description}", "Starts SteamVR");
+ private static readonly ILogger Logger = Log.ForContext();
+
+ public static async Task StartAsync() {
+ var config = Program.ConfigurationInstance!.Base!.VR;
+
+ Logger.Information("Starting SteamVR...");
+ Process.Start(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "steam.exe"), "steam://rungameid/250820");
+ try {
+ Processes.SteamVrProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrserver");
+ if (Processes.SteamVrProcess != null) {
+ Logger.Information("SteamVR is {0} with process ID {1}; not re-launching.", "already running", Processes.SteamVrProcess.Id);
+ Logger.Information("SteamVR detected. This {0} will close when SteamVR closes...", Vars.AppName);
+ return;
+ }
+ }
+ catch { /*ignore*/ }
+
+ Logger.Information("Waiting 5 seconds for SteamVR to fully start...");
+ await Task.Delay(TimeSpan.FromSeconds(5));
+
+ if (config.AutoLaunchWithSteamVr) {
+ if (config.HasRegistered is false) {
+ var manifest = new vrappmanifest {
+ source = "builtin",
+ applications = [
+ new applications {
+ app_key = "dev.mintylabs.vrstartassistant",
+ app_type = "application",
+ launch_type = "binary",
+ binary_path_windows = "VRStartAssistant.exe",
+ is_dashboard_overlay = false,
+ strings = new langs {
+ en_us = new strings {
+ name = "VRStartAssistant",
+ description = "1"
+ }
+ }
+ }
+ ]
+ };
+
+ var steamVr = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "steamapps", "common", "SteamVR");
+ var manifestPath = Path.Combine(Environment.CurrentDirectory, "manifest.vrappmanifest");
+ var json = JsonSerializer.Serialize(manifest, new JsonSerializerOptions { WriteIndented = true });
+ await File.WriteAllTextAsync(manifestPath, json);
+
+ await Task.Delay(TimeSpan.FromSeconds(1));
+ try {
+ Process.Start(new ProcessStartInfo {
+ FileName = steamVr + "bin" + "win64" + "vrpathreg.exe",
+ Arguments = $"addapp {manifestPath}",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true
+ });
+
+ config.HasRegistered = true;
+ }
+ catch {
+ Logger.Error("Failed to register {0} with SteamVR.", Vars.AppName);
+ return;
+ }
+ }
+ else {
+ Logger.Information("{0} is already registered with SteamVR.", Vars.AppName);
+ }
+ }
+
+ try {
+ Logger.Information("Attempting to detect SteamVR...");
+ Processes.SteamVrProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrserver");
+ if (Processes.SteamVrProcess != null /* && Processes.SteamVrProcess.ProcessName.ToLower() == "vrserver"*/)
+ Logger.Information("SteamVR detected. This {0} will close when SteamVR closes...", Vars.AppName);
+ else
+ Logger.Warning("SteamVR was {0}. Auto-Close with SteamVR is disabled. {1}", "not detected", "Please start this program after SteamVR has started.");
+ }
+ catch { /*ignore*/ }
+ }
+
+ public static void Exit() {
+ if (Processes.SteamVrProcess == null) return;
+ Logger.Information("SteamVR has exited.");
+ OscMedia.StopMediaDetection();
+ }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/Apps/VRChat.cs b/VRStartAssistant/Features/Apps/VRChat.cs
new file mode 100644
index 0000000..3ac798e
--- /dev/null
+++ b/VRStartAssistant/Features/Apps/VRChat.cs
@@ -0,0 +1,34 @@
+using System.Diagnostics;
+using Serilog;
+
+namespace VRStartAssistant.Features.Apps;
+
+public class VRChat {
+ public VRChat() => Logger.Information("Setting up module :: {Description}", "Starts and Minimizes VRChat");
+ private static readonly ILogger Logger = Log.ForContext();
+
+ public static async Task Start() {
+ var didLoop = false;
+ var looped = 0;
+ Logger.Information("Starting VRChat...");
+ Process.Start(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "steam.exe"), "steam://rungameid/438100");
+
+ loop:
+ if (looped >= 3) {
+ Logger.Warning("VRChat was {0} after {attempts} attempts. No longer trying again...", "not detected", looped);
+ return;
+ }
+
+ Logger.Information($"Waiting {(didLoop ? 5 : 15)} seconds for VRChat to fully start...");
+ await Task.Delay(TimeSpan.FromSeconds(didLoop ? 5 : 15));
+
+ Logger.Information("Attempting to detect VRChat...");
+ Processes.VrChatProcess = Process.GetProcesses().ToList().FirstOrDefault(p => p?.ProcessName.ToLower() == "vrchat");
+ if (Processes.VrChatProcess == null) {
+ Logger.Warning("VRChat was {0}. Trying again.", "not detected");
+ didLoop = true;
+ looped++;
+ goto loop;
+ }
+ }
+}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/AudioSwitch.cs b/VRStartAssistant/Features/AudioSwitch.cs
index 30f3b86..1468670 100644
--- a/VRStartAssistant/Features/AudioSwitch.cs
+++ b/VRStartAssistant/Features/AudioSwitch.cs
@@ -1,29 +1,28 @@
using AudioSwitcher.AudioApi;
using AudioSwitcher.AudioApi.CoreAudio;
using Serilog;
+using VRStartAssistant.Configuration;
+using VRStartAssistant.Configuration.Classes;
namespace VRStartAssistant.Features;
public class AudioSwitch {
public AudioSwitch() => Logger.Information("Setting up module :: {Description}", "Automatically switches to specific audio devices");
- private static readonly ILogger Logger = Log.ForContext(typeof(AudioSwitch));
+ private static readonly ILogger Logger = Log.ForContext();
+ private static readonly CoreAudioController Controller = new();
public static void Start(bool showDebug = false) {
var conf = Program.ConfigurationInstance!.Base!.Audio;
try {
- var controller = new CoreAudioController();
if (showDebug) {
- Logger.Information("Looking for devices...");
- var devices = controller.GetPlaybackDevicesAsync(DeviceState.Active).GetAwaiter().GetResult();
- foreach (var dev in devices) {
- Logger.Information("{0} - {1} - Is Muted: {2} - Volume: {3}", dev.FullName, dev.Id, dev.IsMuted, dev.Volume);
- }
+ GetAudioDevices();
Logger.Information("Is Running Debug ... Not changing audio device");
return;
}
+
Logger.Information("Attempting to set default audio device to {Device}...", conf.AudioDevices[conf.DefaultAudioDevice].Name);
- var device = controller.GetDeviceAsync(Guid.Parse(conf.AudioDevices[conf.DefaultAudioDevice].Guid)).GetAwaiter().GetResult();
- controller.DefaultPlaybackDevice = device;
+ var device = Controller.GetDeviceAsync(Guid.Parse(conf.AudioDevices[conf.DefaultAudioDevice].Guid)).GetAwaiter().GetResult();
+ Controller.DefaultPlaybackDevice = device;
Logger.Information("Set audio device to {0}", conf.AudioDevices[conf.DefaultAudioDevice].Name);
}
catch (Exception e) {
@@ -38,14 +37,39 @@ public static void SwitchBack() {
return;
try {
- var controller = new CoreAudioController();
Logger.Information("Attempting to set default audio device to {Device}...", conf.AudioDevices[conf.SwitchBackAudioDevice].Name);
- var device = controller.GetDeviceAsync(Guid.Parse(conf.AudioDevices[conf.SwitchBackAudioDevice].Guid)).GetAwaiter().GetResult();
- controller.DefaultPlaybackDevice = device;
+ var device = Controller.GetDeviceAsync(Guid.Parse(conf.AudioDevices[conf.SwitchBackAudioDevice].Guid)).GetAwaiter().GetResult();
+ Controller.DefaultPlaybackDevice = device;
Logger.Information("Set audio device to {0}", conf.AudioDevices[conf.SwitchBackAudioDevice].Name);
}
catch (Exception e) {
Logger.Error(e, "Failed to set default audio device");
}
}
+
+ public static void GetAudioDevices() {
+ var conf = Program.ConfigurationInstance!.Base!.Audio;
+ List audioDevices = [];
+ Logger.Information("Looking for devices...");
+ var devices = Controller.GetPlaybackDevicesAsync(DeviceState.Active).GetAwaiter().GetResult();
+ foreach (var dev in devices) {
+ Logger.Information("{0} - {1} - Is Muted: {2} - Volume: {3}", dev.FullName, dev.Id, dev.IsMuted, dev.Volume);
+
+ if (!conf.ApplyAllDevicesToList)
+ continue;
+
+ conf.AudioDevices.Add(new AudioDevices {
+ Id = conf.AudioDevices.Count,
+ Name = dev.FullName,
+ Guid = dev.Id.ToString()
+ });
+ }
+
+ if (!conf.ApplyAllDevicesToList)
+ return;
+
+ Logger.Information("Saved devices to configuration file...");
+ conf.ApplyAllDevicesToList = false;
+ Program.ConfigurationInstance.Save();
+ }
}
diff --git a/VRStartAssistant/Features/Integrations/HASS.cs b/VRStartAssistant/Features/Integrations/HASS.cs
index b8fb9af..61d7810 100644
--- a/VRStartAssistant/Features/Integrations/HASS.cs
+++ b/VRStartAssistant/Features/Integrations/HASS.cs
@@ -5,104 +5,102 @@ namespace VRStartAssistant.Features.Integrations;
public class HASS {
public HASS() => Logger.Information("Setting up module :: {Description}", "Controls Home Assistant devices");
- private static readonly ILogger Logger = Log.ForContext(typeof(HASS));
+ private static readonly ILogger Logger = Log.ForContext();
private static int _requestCount = 0;
public static async Task ToggleBaseStations(bool toggleOff = false) {
+ _requestCount = 0;
var hass = Program.ConfigurationInstance.Base.HASS;
var client = new RestClient(hass.Host + "api/");
+ if (Vars.Verbose)
+ Logger.Information("[{0}] RestClient URI: {1}", "VERBOSE", $"{hass.Host}api/");
// Home Assistant Authorization
try {
Logger.Information("Connecting to Home Assistant...");
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Assigned Headers", "VERBOSE");
client.AddDefaultHeaders(new Dictionary {
{ "Content-Type", "application/json" },
{ "Authorization", $"Bearer {hass.Token}" }
});
}
catch (Exception e) {
- Logger.Error(e, "Failed to connect to Home Assistant");
- }
-
- // Toggle Base Stations
- try {
- var dic = new Dictionary();
- for (var i = 0; i < hass.BaseStationEntityIds.Count; i++) // create requests based on how many base stations there are
- dic.Add(i, new RestRequest($"services/switch/{(toggleOff ? "turn_off" : "turn_on")}", Method.Post));
-
- Logger.Information("Sending requests - Turning Base Stations {0}", toggleOff ? "off" : "on");
- var requestCount = 0;
- foreach (var (key, value) in dic) {
- if (hass.BaseStationEntityIds[key] == "") // if entry is empty, skip
- continue;
-
- value.AddJsonBody($"{{\"entity_id\": \"switch.{hass.BaseStationEntityIds[key]}\"}}");
- // await Task.Delay(TimeSpan.FromMilliseconds(500));
- await client.PostAsync(value);
- requestCount++;
- }
-
- Logger.Information("{0} Requests sent.", requestCount);
- }
- catch (Exception e) {
- Logger.Error(e, "Failed to toggle Base Stations");
- }
-
- if (!hass.ControlLights) {
- client.Dispose();
+ Logger.Error(e, "Failed to connect to Home Assistant. Most likely caused by an invalid token.");
return;
}
- // Set Light Brightness + Color
- try {
- var dic = new Dictionary();
- for (var i = 0; i < hass.HueLightEntityIds.Count; i++)
- dic.Add(i, new RestRequest($"services/light/{(toggleOff ? "turn_off" : "turn_on")}", Method.Post));
-
- Logger.Information("Sending requests - Setting Light Brightness + Color");
- foreach (var (key, value) in dic) {
- if (hass.HueLightEntityIds[key] == "") // if entry is empty, skip
- continue;
-
- var jsonObject = $"{{\"entity_id\": \"light.{hass.HueLightEntityIds[key]}\", \"brightness\": {hass.LightBrightness}, \"rgb_color\": [{hass.LightColor[0]}, {hass.LightColor[1]}, {hass.LightColor[2]}]}}";
-
- value.AddJsonBody(jsonObject);
-
- // await Task.Delay(TimeSpan.FromMilliseconds(500)); // delay between requests to prevent overloading the server
- // Logger.Debug("Hitting request {0} with JSON:\n{1}", requestCount, jsonObject);
- await client.PostAsync(value);
- _requestCount++;
+ if (hass.ControlSwitches) {
+ // Toggle Base Stations - or Switches
+ try {
+ var dic = new Dictionary();
+ for (var i = 0; i < hass.ToggleSwitchEntityIds.Count; i++) // create requests based on how many base stations there are
+ dic.Add(i, new RestRequest($"services/switch/{(toggleOff ? "turn_off" : "turn_on")}", Method.Post));
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Added RestRequest to Dictionary: {1}", "VERBOSE", $"services/switch/{(toggleOff ? "turn_off" : "turn_on")}");
+
+ Logger.Information("Sending requests - Turning Base Stations {0}", toggleOff ? "off" : "on");
+ var requestCount = 0;
+ foreach (var (key, value) in dic) {
+ if (hass.ToggleSwitchEntityIds[key] == "") // if entry is empty, skip
+ continue;
+
+ var jsonObject = $"{{\"entity_id\": \"switch.{hass.ToggleSwitchEntityIds[key]}\"}}";
+
+ value.AddJsonBody(jsonObject);
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Added value ({1}) to RestRequest", "VERBOSE", jsonObject);
+
+ await client.PostAsync(value);
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Sent Post Request", "VERBOSE");
+ requestCount++;
+ }
+
+ Logger.Information("{0} Requests sent.", requestCount);
+ }
+ catch (Exception e) {
+ Logger.Error(e, "Failed to toggle Base Stations");
}
}
- catch (Exception e) {
- Logger.Error(e, "Failed to set light brightness + color");
- }
-
- // Set Extra Light Values : These will be considered to be turned off
- try {
- var dic = new Dictionary();
- for (var i = 0; i < hass.ExtraHueLightEntityIds.Count; i++)
- dic.Add(i, new RestRequest("services/light/turn_off", Method.Post));
- Logger.Information("Sending requests - Setting Extra Lights Off");
- foreach (var (key, value) in dic) {
- if (hass.ExtraHueLightEntityIds[key] == "") // if entry is empty, skip
- continue;
-
- var jsonObject = $"{{\"entity_id\": \"light.{hass.ExtraHueLightEntityIds[key]}\"";
-
- value.AddJsonBody(jsonObject);
-
- await client.PostAsync(value);
- _requestCount++;
+ if (hass.ControlLights) {
+ // Set Light Brightness + Color
+ try {
+ var dic = new Dictionary();
+ for (var i = 0; i < hass.LightEntityIds.Count; i++)
+ dic.Add(i, new RestRequest($"services/light/{(toggleOff ? "turn_off" : "turn_on")}", Method.Post));
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Added RestRequest to Dictionary: {1}", "VERBOSE", $"services/light/{(toggleOff ? "turn_off" : "turn_on")}");
+
+ Logger.Information("Sending requests - Setting Light Brightness + Color");
+ foreach (var (key, value) in dic) {
+ if (hass.LightEntityIds[key] == "") // if entry is empty, skip
+ continue;
+
+ var jsonObject = $"{{\"entity_id\": \"light.{hass.LightEntityIds[key]}\", \"brightness\": {hass.LightBrightness}, \"rgb_color\": [{hass.LightColor[0]}, {hass.LightColor[1]}, {hass.LightColor[2]}]}}";
+
+ value.AddJsonBody(jsonObject);
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Added value ({1}) to RestRequest", "VERBOSE", jsonObject);
+
+ // await Task.Delay(TimeSpan.FromMilliseconds(500)); // delay between requests to prevent overloading the server
+ // Logger.Debug("Hitting request {0} with JSON:\n{1}", requestCount, jsonObject);
+ await client.PostAsync(value);
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Sent Post Request", "VERBOSE");
+ _requestCount++;
+ }
+ }
+ catch (Exception e) {
+ Logger.Error(e, "Failed to set light brightness + color");
}
- }
- catch (Exception e) {
- Logger.Error(e, "Failed to set extra lights off");
}
Logger.Information("{0} Requests sent.", _requestCount);
client.Dispose();
+ if (Vars.Verbose)
+ Logger.Information("[{0}] Disposed HASS Client", "VERBOSE");
}
}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/OscMedia.cs b/VRStartAssistant/Features/OscMedia.cs
index 790fee4..8b063d2 100644
--- a/VRStartAssistant/Features/OscMedia.cs
+++ b/VRStartAssistant/Features/OscMedia.cs
@@ -11,7 +11,7 @@ namespace VRStartAssistant.Features;
// as well as my girlfriend's private project
public class OscMedia {
- private static readonly ILogger Logger = Log.ForContext(typeof(OscMedia));
+ private static readonly ILogger Logger = Log.ForContext();
private static GlobalSystemMediaTransportControlsSessionManager? _sessionManager;
private static GlobalSystemMediaTransportControlsSession? _session;
private static GlobalSystemMediaTransportControlsSessionMediaProperties? _nowPlaying;
@@ -28,9 +28,10 @@ private enum NotificationType {
}
internal static void StartMediaDetection() {
+ var o = Program.ConfigurationInstance!.Base!.OscThings;
_oscSender = new OscDuplex(
- new IPEndPoint(IPAddress.Loopback, Program.ConfigurationInstance.Base.OscThings.ListeningPort),
- new IPEndPoint(IPAddress.Loopback, Program.ConfigurationInstance.Base.OscThings.SendingPort)
+ new IPEndPoint(IPAddress.Loopback, o.ListeningPort),
+ new IPEndPoint(IPAddress.Loopback, o.SendingPort)
);
Logger.Information("OSC Sender Started");
StartMediaDetectionInternal().RunWithoutAwait();
@@ -76,8 +77,9 @@ private static async Task UpdateCurrentlyPlayingMedia(GlobalSystemMediaTransport
|| newPlaying.PlaybackType is not (MediaPlaybackType.Video or MediaPlaybackType.Music) // Not a video or music
|| playbackInfo == null || playbackInfo.PlaybackStatus != GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing // No status or it is not playing
|| string.IsNullOrWhiteSpace(newPlaying.Title) // No title
- || (newPlaying.Title == "Up next" && newPlaying.Artist == "DJ X") // Is playing from AI DJ X
- || Program.ConfigurationInstance.Base.OscThings.CustomBlockWordsContains.Any(word => newPlaying.Title.Contains(word, StringComparison.OrdinalIgnoreCase)) // Is Title playing contains a blocked word
+// || newPlaying is { Title: "Up next", Artist: "DJ X" } // Is playing from AI DJ X | Commented out in favor of adding it to the config
+// || Program.ConfigurationInstance.Base.OscThings.CustomBlockWords.Any(word => newPlaying.Title.ContainsOrEqualsOrdinalIgnoreCase(word))
+ || Program.ConfigurationInstance!.Base!.OscThings.CustomBlockWordsContains.Any(word => newPlaying.Title.Contains(word, StringComparison.OrdinalIgnoreCase)) // Is Title playing contains a blocked word
|| Program.ConfigurationInstance.Base.OscThings.CustomBlockWordsContains.Any(word => newPlaying.Artist.Contains(word, StringComparison.OrdinalIgnoreCase)) // Is Artist playing contains a blocked word
|| Program.ConfigurationInstance.Base.OscThings.CustomBlockWordsEquals.Any(word => newPlaying.Title.Equals(word, StringComparison.OrdinalIgnoreCase)) // Is Title playing equals a blocked word
|| Program.ConfigurationInstance.Base.OscThings.CustomBlockWordsEquals.Any(word => newPlaying.Artist.Equals(word, StringComparison.OrdinalIgnoreCase)) // Is Artist playing equals a blocked word
@@ -256,7 +258,7 @@ private static void SessionManagerCurrentSessionChanged(GlobalSystemMediaTranspo
private static void UpdateCurrentlyPlayingMediaProxy(GlobalSystemMediaTransportControlsSession sender)
=> UpdateCurrentlyPlayingMedia(sender).RunWithoutAwait();
- ///
+ /*///
/// Enum to classify the different commands that can be executed
///
private enum MediaCommandType {
@@ -267,9 +269,9 @@ private enum MediaCommandType {
Skip,
Info,
TogglePlayback
- }
+ }*/
- ///
+ /*///
/// List of command aliases
///
private static readonly IReadOnlyDictionary _commandTriggers = new Dictionary() {
@@ -291,9 +293,9 @@ private enum MediaCommandType {
{ "now", MediaCommandType.Info },
{ "toggle", MediaCommandType.TogglePlayback },
- };
+ };*/
- ///
+ /*///
/// Handles the lowercase raw media command, skips otherwise
///
/// Raw command
@@ -306,7 +308,7 @@ internal static bool HandleRawMediaCommand(string command) {
var mediaCommand = _commandTriggers[command];
HandleMediaCommand(mediaCommand).RunWithoutAwait();
return true;
- }
+ }*/
/*///
/// Handles osc media commands
@@ -334,7 +336,7 @@ internal static bool HandleOscMediaCommands(string address) {
return command != MediaCommandType.None;
}*/
- ///
+ /*///
/// Actual handling of media commands
///
/// command type
@@ -365,7 +367,7 @@ private static async Task HandleMediaCommand(MediaCommandType command) {
case MediaCommandType.Rewind:
if (await _session.TrySkipPreviousAsync())
- Logger.Information("Rewinded media playback");
+ Logger.Information("Rewound media playback");
return;
case MediaCommandType.Info:
@@ -377,12 +379,12 @@ private static async Task HandleMediaCommand(MediaCommandType command) {
default: return;
}
- }
+ }*/
private static async Task SendOscMessage(string address, params object[] args) {
var msg = new OscMessage(address, args);
await _oscSender.SendAsync(msg);
- await Task.Delay(TimeSpan.FromSeconds(Program.ConfigurationInstance.Base.OscThings.SecondToAutoHideChatBox));
+ await Task.Delay(TimeSpan.FromSeconds(Program.ConfigurationInstance!.Base!.OscThings.SecondsToAutoHideChatBox));
await _oscSender.SendAsync(new OscMessage(AddressGameTextbox, string.Empty));
}
}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/WindowMinimizer.cs b/VRStartAssistant/Features/WindowMinimizer.cs
index 073e35f..3ecb279 100644
--- a/VRStartAssistant/Features/WindowMinimizer.cs
+++ b/VRStartAssistant/Features/WindowMinimizer.cs
@@ -6,7 +6,7 @@ namespace VRStartAssistant.Features;
public class WindowMinimizer {
public WindowMinimizer() => Logger.Information("Setting up module :: {Description}", "Functions to minimize windows");
- private static readonly ILogger Logger = Log.ForContext(typeof(WindowMinimizer));
+ private static readonly ILogger Logger = Log.ForContext();
// [DllImport("user32.dll", EntryPoint = "FindWindow")]
// private static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
@@ -18,21 +18,43 @@ public class WindowMinimizer {
[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
- public static async Task DelayedMinimize() {
- await Task.Delay(TimeSpan.FromSeconds(Vars.IsDebug ? 5 : 30));
-
+ public static async Task Minimize() {
ShowWindow(GetConsoleWindow(), 0); // Hide this console window
if (Processes.VrChatProcess is not null) {
Logger.Information("Minimizing VRChat...");
ShowWindow(Processes.VrChatProcess.MainWindowHandle, 6);
+ }
+
+ if (Program.ConfigurationInstance!.Base!.OscThings.ForceStartMediaStatus
+ || (Processes.VrChatProcess is not null && !Program.ConfigurationInstance.Base.OscThings.ForceStartMediaStatus)) {
OscMedia.StartMediaDetection();
- // OscMedia.StartOscMediaThread();
}
-
- foreach (var oscLeash in Processes.OSCLeash) {
- Logger.Information("Minimizing OSCLeash...");
- ShowWindow(oscLeash.MainWindowHandle, 6);
+
+ try {
+ foreach (var obj in Processes.SingleApplications) {
+ if (obj.Value is null) continue;
+ Logger.Information("Minimizing {Name}...", obj.Key);
+ ShowWindow(obj.Value.MainWindowHandle, 6);
+ }
}
+ catch (Exception e) {
+ Logger.Error(e, "Failed to minimize single processes");
+ }
+
+ try {
+ foreach (var obj in Processes.MultiApplications) {
+ if (obj.Value is null) continue;
+ foreach (var process in obj.Value) {
+ Logger.Information("Minimizing {Name}...", process.ProcessName);
+ ShowWindow(process.MainWindowHandle, 6);
+ }
+ }
+ }
+ catch (Exception e) {
+ Logger.Error(e, "Failed to minimize multiple processes");
+ }
+
+ await Task.CompletedTask;
}
}
\ No newline at end of file
diff --git a/VRStartAssistant/Features/WindowsXSO.cs b/VRStartAssistant/Features/WindowsXSO.cs
deleted file mode 100644
index cb770d2..0000000
--- a/VRStartAssistant/Features/WindowsXSO.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-using System.Diagnostics;
-using Windows.UI.Notifications;
-using Windows.UI.Notifications.Management;
-using Serilog;
-using VRStartAssistant.Utils;
-using XSNotifications;
-using XSNotifications.Enum;
-
-namespace VRStartAssistant.Features;
-
-public class WindowsXSO {
- public WindowsXSO() => Logger.Information("Setting up module :: {Description}", "Windows to XSOverlay Notification Relay");
- private static readonly ILogger Logger = Log.ForContext(typeof(WindowsXSO));
-
- private static UserNotificationListener? _listener;
- private static UserNotificationListenerAccessStatus _accessStatus;
- private static readonly List KnownNotifications = [];
- private static readonly List TargetApplicationNames = Program.ConfigurationInstance.Base.WinXSO.Settings.Applications.ToList();
- private static readonly XSNotifier XsNotifier = new();
-
- internal static async Task StartAsync() {
- _listener = UserNotificationListener.Current;
- _accessStatus = _listener.RequestAccessAsync().GetResults();
-
- var isInRestartMessage = false;
- switch (_accessStatus) {
- case UserNotificationListenerAccessStatus.Allowed:
- Logger.Information("Notifications {0}.", "access granted");
- break;
- case UserNotificationListenerAccessStatus.Denied:
- Logger.Error("Notifications {0}.", "access denied");
- isInRestartMessage = true;
- Logger.Warning("Please grant access to notifications.");
- Console.WriteLine("----------------------------------------");
- Logger.Warning("<[{0}]>", "Windows 11");
- Logger.Warning("(System) Settings > Privacy & Security > Notifications (Section) > Allow apps to access notifications > ON (true)");
- Logger.Warning("<[{0}]>", "Windows 10");
- Logger.Warning("(System) Settings > Notifications & actions > Get notifications from apps and other senders > ON (true)");
- Logger.Warning("<[{0}]>", "BOTH");
- Logger.Warning("Make sure Focus Assist is OFF (false)");
- Logger.Warning("Once complete, restart this program.");
- Logger.Warning($"Press any key to exit {Vars.AppName}.");
- Console.ReadKey();
- break;
- case UserNotificationListenerAccessStatus.Unspecified:
- Logger.Warning("Notifications {0}.", "access unspecified");
- Logger.Warning("Notifications may not work as intended.");
- break;
- default: throw new ArgumentOutOfRangeException();
- }
-
- if (isInRestartMessage)
- Process.GetCurrentProcess().Kill();
-
- var config = Program.ConfigurationInstance!.Base!.WinXSO.Settings;
- // Logger.Information("Whitelist target applications: {0}", string.Join(", ", TargetApplicationNames!));
-
- Logger.Information($"Starting notification listener in {(config.Whitelist ? "Whitelist" : "Blacklist")} mode...");
- Logger.Information($"{(config.Whitelist ? "Allowing" : "Blocking")} target applications: " + "{0}", string.Join(", ", config.Applications!));
- Program.ChangeConsoleTitle();
- await Program.StartApplications();
-
- Logger.Information("Starting WindowsXSO Notification Relay...");
- while (true) { // Keep the program looping
- // Check if SteamVR is still running, if so, kill other applications
- Program.CheckForExitedProcess();
-
- IReadOnlyList readOnlyListOfNotifications = _listener.GetNotificationsAsync(NotificationKinds.Toast).AsTask().Result;
-
- foreach (var userNotification in readOnlyListOfNotifications) {
- if (KnownNotifications.Contains(userNotification.Id)) continue;
- KnownNotifications.Add(userNotification.Id);
-
- try {
- Windows.ApplicationModel.AppInfo? appInfo = null;
- try { appInfo = userNotification.AppInfo; } catch { /*ignored*/ }
-
- var appName = appInfo != null ? appInfo.DisplayInfo.DisplayName : "";
- var textElements = userNotification.Notification.Visual.GetBinding(KnownNotificationBindings.ToastGeneric)?.GetTextElements();
- var elementList = textElements?.Select(t => t.Text).ToArray();
- if (elementList == null) continue;
- var title = elementList?[0];
-
- switch (config.Whitelist) {
- case true when !config.Applications!.Contains(appName!.ToLower()):
- case false when config.Applications!.Contains(appName!.ToLower()):
- continue;
- }
-
- if (!TargetApplicationNames.Contains(appName!.ToLower())) return;
-
- var text = elementList?.Length >= 2 ? string.Join("\n", elementList.Skip(1)) : "";
-
- if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(text)) continue;
-
- var height = CalculateHeight(text);
- var timeout = CalculateTimeout(text);
- var truncateText = height > 250f;
-
- if (text.ToLower().OrContainsMultiple(".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp", ".tiff", ".tif", ".svg")) {
- text = $"[image: {text}]";
- } else if (text.Length == 0) {
- text = "[sent an embed of some sort]";
- }
-
- var xsNotification = new XSNotification {
- Title = $"{appName} - {title}", // supports Rich Text Formatting
- Content = truncateText ? text[..1200] : text, // supports Rich Text Formatting
- Timeout = timeout, // [float] seconds
- SourceApp = Vars.AppName, // [string] name of your app
- MessageType = XSMessageType.Notification, // Notification or MediaPlayer
- UseBase64Icon = false, // Base64 encoded image
- Icon = "default", // Can also be "default", "error", or "warning"
- Opacity = 0.8f, // [float] 0 to 1
- Height = height, // [float] 0 to 250
- Volume = 0.2f, // [float] 0 to 1
- AudioPath = "default" // Can also be "default", "error", or "warning"
- };
-
- XsNotifier.SendNotification(xsNotification);
- Logger.Information("Notification sent from {0}: \"{1} - {2}\"", appName, title, text);
- if (Vars.IsDebug)
- Logger.Debug("JSON: {0}\n", xsNotification.AsJson());
- }
- catch (Exception e) {
- Logger.Error(e, "Error sending notification.");
- }
- }
-
- // try {
- // Program.ConfigurationInstance.Load();
- // }
- // catch {/**/}
- await Task.Delay(TimeSpan.FromSeconds(1));
- }
- }
-
- private static int CalculateHeight(string content) =>
- content.Length switch {
- <= 100 => 100,
- <= 200 => 150,
- <= 300 => 200,
- _ => 250
- };
-
- private static float CalculateTimeout(string content) =>
- content.Length switch {
- <= 100 => 3f,
- <= 200 => 4f,
- <= 300 => 5f,
- _ => 6f
- };
-}
\ No newline at end of file
diff --git a/VRStartAssistant/Processes.cs b/VRStartAssistant/Processes.cs
index 438030e..bb3f5de 100644
--- a/VRStartAssistant/Processes.cs
+++ b/VRStartAssistant/Processes.cs
@@ -5,26 +5,11 @@ namespace VRStartAssistant;
public class Processes {
public Processes() => Logger.Information("Setting up module :: {Description}", "Process Module");
- private static readonly ILogger Logger = Log.ForContext(typeof(Processes));
+ private static readonly ILogger Logger = Log.ForContext();
/* In-App Processes */
+ public static Dictionary SingleApplications = new();
+ public static Dictionary?> MultiApplications = new();
public static Process? SteamVrProcess;
public static Process? VrChatProcess;
- public static List? VrcxProcesses;
- public static Process? VrcVideoCacher;
- public static Process? AdGoBye;
- public static Process? HOSCY;
- public static Process? HeartRateOnStream;
- public static List? OSCLeash;
- public static Process? Vor;
- /* Secret things */
- public static List? SecretApp1;
-
- /* External Processes */
- // public static List? WindowsTerminal;
-
- public static async Task GetOtherProcesses() {
- await Task.Delay(TimeSpan.FromSeconds(8));
- // WindowsTerminal = Process.GetProcesses().Where(p => p.ProcessName.ToLower().Contains("WindowsTerminal")).ToList();
- }
}
\ No newline at end of file
diff --git a/VRStartAssistant/Program.cs b/VRStartAssistant/Program.cs
index 795876c..07cd6d0 100644
--- a/VRStartAssistant/Program.cs
+++ b/VRStartAssistant/Program.cs
@@ -1,34 +1,49 @@
-using Serilog;
+using System.Diagnostics;
+using Serilog;
using Serilog.Core;
using Serilog.Events;
using Serilog.Templates;
using Serilog.Templates.Themes;
-using VRStartAssistant.Apps;
using VRStartAssistant.Configuration;
using VRStartAssistant.Features;
using VRStartAssistant.Features.Integrations;
-using VRStartAssistant.Utils;
+using System.CommandLine;
+using System.CommandLine.NamingConventionBinder;
+using VRStartAssistant.Features.Apps;
namespace VRStartAssistant;
public static class Vars {
public const string AppName = "VRStartAssistant";
public const string WindowsTitle = "Automate VR Startup Things";
- public const string AppVersion = "1.16.2";
- public const int TargetConfigVersion = 12;
- internal static readonly string? BaseDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Documents", "Visual Studio Projects", "VROnStartAssistant", "Build");
+ public const string AppVersion = "2.0.0";
+ public const int TargetConfigVersion = 14;
#if DEBUG
public static bool IsDebug = true;
+ public static bool Verbose = true;
#else
- public static bool IsDebug;
+ public static bool IsDebug { get; set; }
+ public static bool Verbose { get; set; }
#endif
+ public static bool GetAudioDevices { get; set; }
}
public abstract class Program {
- public static Config? ConfigurationInstance;
+ internal static Config? ConfigurationInstance;
public static async Task Main(string[] args) {
- Vars.IsDebug = args.Contains("--debug");
+ var root1 = new RootCommand { new Option("--debug", "Switch operations to run certain code but not others") };
+ var root2 = new RootCommand { new Option("--verbose", "Print everything to the console") };
+ var root3 = new RootCommand { new Option("--get-audio-devices", "Print all audio devices to the console") };
+
+ root1.Handler = CommandHandler.Create(x => Vars.IsDebug = x);
+ root2.Handler = CommandHandler.Create(x => Vars.Verbose = x);
+ root3.Handler = CommandHandler.Create(x => Vars.GetAudioDevices = x);
+
+ await root1.InvokeAsync(args);
+ await root2.InvokeAsync(args);
+ await root3.InvokeAsync(args);
+
var levelSwitch = new LoggingLevelSwitch {
MinimumLevel = LogEventLevel.Information // Vars.IsDebug ? LogEventLevel.Debug : LogEventLevel.Warning
};
@@ -39,60 +54,70 @@ public static async Task Main(string[] args) {
theme: TemplateTheme.Literate))
.WriteTo.File(Path.Combine(Environment.CurrentDirectory, "Logs", "start_.log"),
rollingInterval: RollingInterval.Day,
- retainedFileCountLimit: 10,
+ retainedFileCountLimit: 5,
rollOnFileSizeLimit: true,
- fileSizeLimitBytes: 1024000000L)
+ fileSizeLimitBytes: 5000000L) // Split file if over 5MB
.CreateLogger();
ChangeConsoleTitle();
- Log.Information("Base Directory: {0}", Vars.BaseDir);
+ Log.Information("Base Directory: {0}", AppDomain.CurrentDomain.BaseDirectory);
ConfigurationInstance = new Config();
ConfigurationInstance.Load();
-
- // used for debugging audio switch code
- // AudioSwitch.Start(true);
- // ValidateAppPaths.Go();
- // Console.WriteLine("\n");
- // Log.Information("Configuration:\n{0}", ConfigurationInstance.ToJson());
- // Console.ReadLine();
- // return;
+
+ if (Vars.GetAudioDevices)
+ AudioSwitch.GetAudioDevices();
+
+ if (Vars.IsDebug) {
+ AudioSwitch.Start(Vars.IsDebug);
+ Log.Information("Configuration:\n{0}", ConfigurationInstance.ToJson());
+ await ProgramManager.StartApplications();
+ Console.ReadLine();
+ ProgramManager.ExitApplications();
+ Console.ReadLine();
+ return;
+ }
await HASS.ToggleBaseStations(); // Turns on Base Stations
- await WindowsXSO.StartAsync(); // Start XSO & everything else
+
+ ChangeConsoleTitle();
+ await StartApplications();
+ while (true) {
+ // Check if SteamVR is still running, if so, kill other applications
+ if (Processes.SteamVrProcess is not { HasExited: true }) continue;
+ await CheckForExitedProcess();
+ break;
+ }
}
public static void ChangeConsoleTitle(string extraData = "") => Console.Title = Vars.WindowsTitle + " v" + Vars.AppVersion + (Vars.IsDebug ? " - DEBUG" : "") + (string.IsNullOrEmpty(extraData) ? "" : $" - {extraData}");
-
- public static async Task StartApplications() {
+
+ private static async Task StartApplications() {
try {
- VRCX.Start(); // Start VRCX
- await VRChatOscRouter.Start(); // Start VRChat OSC Router
- await AdGoBye.Start(); // Start AdGoBye
- await Secret.SecretApp1.Start(); // Start SecretApp1
- await SteamVR.StartAsync(); // Start SteamVR, Start VRChat, Switch Audio, Custom Media OSC chatbox for VRChat
- await HOSCY.Start(); // Start HOSCY
- await HeartrateMonitor.Start(); // Start HeartRateOnStream-OSC
- await OSCLeash.Start(); // Start OSCLeash
- await Processes.GetOtherProcesses(); // Get Other Processes
- await WindowMinimizer.DelayedMinimize(); // Minimize VRChat, VRCVideoCacher, AdGoBye, HOSCY
+ await ProgramManager.StartApplications();
+ await SteamVR.StartAsync(); // Start SteamVR and / or register a vrappmanifest
+ await Task.Delay(TimeSpan.FromSeconds(5));
+ AudioSwitch.Start();
+
+ await Task.Delay(TimeSpan.FromSeconds(2));
+ await VRChat.Start();
+
+ await Task.Delay(TimeSpan.FromSeconds(30));
+ await WindowMinimizer.Minimize();
}
catch (Exception ex) {
Log.Error("Something in the Application Startup has failed: \n{0}", ex.Message + "\n" + ex.StackTrace);
}
}
-
- public static void CheckForExitedProcess() {
- if (Processes.SteamVrProcess is not { HasExited: true }) return;
- SteamVR.Exit().RunWithoutAwait();
- VRCVideoCacher.Exit();
- AdGoBye.Exit();
- VRCX.Exit();
- Secret.SecretApp1.Exit();
- HOSCY.Exit();
- HeartrateMonitor.Exit();
- OSCLeash.Exit();
- VRChatOscRouter.Exit();
+
+ private static async Task CheckForExitedProcess() {
+ Log.Warning("SteamVR has exited. Closing all other processes...");
+ await Task.Delay(TimeSpan.FromSeconds(2));
AudioSwitch.SwitchBack();
+ await HASS.ToggleBaseStations(true);
+ ProgramManager.ExitApplications();
+ SteamVR.Exit();
+ Process.GetCurrentProcess().Kill();
+ Environment.Exit(0);
}
}
\ No newline at end of file
diff --git a/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml b/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..dbd49d7
--- /dev/null
+++ b/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,18 @@
+
+
+
+
+ Release
+ Any CPU
+ C:\Users\Lily\Documents\Visual Studio Projects\VROnStartAssistant\Build Long
+ FileSystem
+ <_TargetId>Folder
+ net8.0-windows10.0.22621.0
+ win-x64
+ false
+ false
+ false
+
+
\ No newline at end of file
diff --git a/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml.user b/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..dc2bec5
--- /dev/null
+++ b/VRStartAssistant/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,10 @@
+
+
+
+
+ True|2024-10-25T23:32:48.2906190Z||;True|2024-10-13T00:03:19.7172806-04:00||;
+
+
+
\ No newline at end of file
diff --git a/VRStartAssistant/Utils/StringUtils.cs b/VRStartAssistant/Utils/StringUtils.cs
index b4d7841..013f67c 100644
--- a/VRStartAssistant/Utils/StringUtils.cs
+++ b/VRStartAssistant/Utils/StringUtils.cs
@@ -16,4 +16,13 @@ public static class StringUtils {
/// As many strings as you want to compare to the target string
/// Boolean indicating that any and all of your specified strings are contained in the target string (this)
public static bool OrContainsMultiple(this string str1, params string[] strs) => strs.Any(str1.Contains);
+
+ ///
+ ///
+ ///
+ /// this
+ /// As many strings as you want to compare to the target string
+ /// Boolean indicating the target string is either equal or contains your specified list of strings, ignoring upper or lower case
+ public static bool ContainsOrEqualsOrdinalIgnoreCase(this string str1, params string[] strs) =>
+ strs.Any(s => str1.Contains(s, StringComparison.OrdinalIgnoreCase)) || strs.Any(s => str1.Equals(s, StringComparison.OrdinalIgnoreCase));
}
\ No newline at end of file
diff --git a/VRStartAssistant/Utils/ValidateAppPaths.cs b/VRStartAssistant/Utils/ValidateAppPaths.cs
deleted file mode 100644
index 92ddfed..0000000
--- a/VRStartAssistant/Utils/ValidateAppPaths.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using VRStartAssistant.Apps;
-
-namespace VRStartAssistant.Utils;
-
-public class ValidateAppPaths {
- public static void Go() {
- AdGoBye.ValidatePath();
- HeartrateMonitor.ValidatePath();
- HOSCY.ValidatePath();
- OSCLeash.ValidatePath();
- VRCVideoCacher.ValidatePath();
- }
-}
\ No newline at end of file
diff --git a/VRStartAssistant/VRStartAssistant.csproj b/VRStartAssistant/VRStartAssistant.csproj
index 890fb73..2f18f90 100644
--- a/VRStartAssistant/VRStartAssistant.csproj
+++ b/VRStartAssistant/VRStartAssistant.csproj
@@ -4,10 +4,10 @@
Exe
enable
enable
- latest
+ latestmajor
Minty Labs
- 1.16.2
- 1.16.2
+ 2.0.0
+ 2.0.0
true
VRSA_798nt23rx867tb32r7t98n321rxey7tn98m213ex321odi9n7tx.snk
true
@@ -15,27 +15,29 @@
MintLily
Minty Labs
Automate VR Startup Things
- net8.0-windows10.0.22621.0
- 1.16.2.1207
+ net9.0-windows10.0.22621.0
+ 2.0.0.1207
https://github.com/MintLily/VRStartAssistant
https://raw.githubusercontent.com/MintLily/VRStartAssistant/main/LICENSE
- ..\Resources\icon.ico
+ ..\Resources\favicon.ico
-
-
+
+
+
+
-
- icon.ico
+
+ favicon.ico
diff --git a/VRStartAssistant/VRStartAssistant.csproj.user b/VRStartAssistant/VRStartAssistant.csproj.user
new file mode 100644
index 0000000..462c0d3
--- /dev/null
+++ b/VRStartAssistant/VRStartAssistant.csproj.user
@@ -0,0 +1,6 @@
+
+
+
+ <_LastSelectedProfileId>C:\Users\Lily\Documents\Visual Studio Projects\VROnStartAssistant\VRStartAssistant\Properties\PublishProfiles\FolderProfile.pubxml
+
+
\ No newline at end of file