Some checks failed
CI / build-and-test (push) Failing after 27s
Observed behavior: on admin-user boxes with UAC effectively disabled, double-clicking the Start Menu / Desktop shortcut spawns TeamsISO with elevated File Explorer as parent. NDI Find then returns zero sources even when Teams is broadcasting — same exe spawned from any other parent (PowerShell, cmd, runas, etc.) discovers sources fine. Suspected window-station / desktop-handle inheritance quirk in NDI's mDNS layer; can't fix from inside the runtime. Workaround: in OnStartup, if parent IS explorer.exe AND we're elevated AND we haven't already re-launched (--relaunched guard), re-spawn ourselves via 'runas /trustlevel:0x20000' to drop to medium integrity. Original process Shutdowns; only the medium child remains. Verified by reproducing the failure case in an elevated PowerShell, then watching the same runas command produce a working child (REST returns participants, log writes work). Add PackageReference for System.Management (Win32_Process via ManagementObjectSearcher) so the parent-PID lookup compiles.
78 lines
3.3 KiB
XML
78 lines
3.3 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
||
|
||
<PropertyGroup>
|
||
<OutputType>WinExe</OutputType>
|
||
<TargetFramework>net8.0-windows</TargetFramework>
|
||
<UseWPF>true</UseWPF>
|
||
<!--
|
||
WinForms in addition to WPF for the system-tray NotifyIcon — there's no
|
||
WPF equivalent. The two frameworks coexist cleanly in .NET 8; UseWindowsForms
|
||
adds System.Windows.Forms.dll without changing the application model.
|
||
-->
|
||
<UseWindowsForms>true</UseWindowsForms>
|
||
<RootNamespace>TeamsISO.App</RootNamespace>
|
||
<AssemblyName>TeamsISO</AssemblyName>
|
||
<EnableWindowsTargeting>true</EnableWindowsTargeting>
|
||
<ApplicationIcon>Assets\teamsiso.ico</ApplicationIcon>
|
||
<!--
|
||
Required by ParticipantViewModel.ScaleNearestNeighborBgra, which writes
|
||
directly into a WriteableBitmap's pinned BackBuffer (IntPtr) for 10×
|
||
better thumbnail update perf than going through Span<byte>.
|
||
-->
|
||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||
</PropertyGroup>
|
||
|
||
<ItemGroup>
|
||
<ProjectReference Include="..\TeamsISO.Engine\TeamsISO.Engine.csproj" />
|
||
<ProjectReference Include="..\TeamsISO.Engine.NdiInterop\TeamsISO.Engine.NdiInterop.csproj" />
|
||
<!--
|
||
System.Management gives us Win32_Process via ManagementObjectSearcher,
|
||
used in App.xaml.cs's ShouldDeElevate() to look up the parent process
|
||
name (we re-spawn ourselves via runas /trustlevel:0x20000 when the
|
||
parent is explorer.exe AND we're elevated — that combo triggers an
|
||
NDI mDNS-isolation bug that returns zero discovered sources).
|
||
-->
|
||
<PackageReference Include="System.Management" Version="8.0.0" />
|
||
</ItemGroup>
|
||
|
||
<!--
|
||
Grant the test assembly access to internal types — specifically the
|
||
OperatorPresetStore.PathOverride hook used to redirect file IO away from
|
||
%LOCALAPPDATA% during tests. We use AssemblyAttribute rather than
|
||
AssemblyInfo.cs so it co-locates with the project's other config.
|
||
-->
|
||
<ItemGroup>
|
||
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
|
||
<_Parameter1>TeamsISO.App.Tests</_Parameter1>
|
||
</AssemblyAttribute>
|
||
</ItemGroup>
|
||
|
||
<!--
|
||
Strings.resx — user-facing English MessageBox copy. Embedded as a
|
||
.NET resource so ResourceManager can resolve TeamsISO.App.Properties.Strings
|
||
by basename. Strings.Designer.cs is hand-written (see file comment).
|
||
-->
|
||
<ItemGroup>
|
||
<EmbeddedResource Update="Properties\Strings.resx">
|
||
<LogicalName>TeamsISO.App.Properties.Strings.resources</LogicalName>
|
||
</EmbeddedResource>
|
||
</ItemGroup>
|
||
|
||
<!-- Wild Dragon brand assets — embedded as resources so the published binary is self-contained. -->
|
||
<ItemGroup>
|
||
<Resource Include="Assets\dragon-mark.png" />
|
||
<Resource Include="Assets\wild-dragon-wordmark.png" />
|
||
<Resource Include="Assets\teamsiso.ico" />
|
||
<!--
|
||
Inter Variable from rsms/inter v3.19 (OFL). Single .ttf covers every weight
|
||
from 100 (Thin) to 900 (Black) so we don't ship a directory of duplicates.
|
||
-->
|
||
<Resource Include="Assets\Fonts\Inter.ttf" />
|
||
<!--
|
||
JetBrains Mono Variable v2.304 (OFL). Used for machine names, source IDs,
|
||
and stat counters where a fixed-width font reads better than Inter.
|
||
-->
|
||
<Resource Include="Assets\Fonts\JetBrainsMono.ttf" />
|
||
</ItemGroup>
|
||
|
||
</Project>
|