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 + +
    + +
    + VR + +
    + +
    + Audio + +
    + +
    + Home Assistant + +
    + +
    + OSC + +
    + +
    + Programs + +
    ### 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