Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e6a8728

Browse files
add tools button: exclude editor folders from windows defender, add context menu: exclude project from defender fixes #87, clear(set) statusbar when enable streamer mode,
1 parent 24a1c59 commit e6a8728

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed

‎UnityLauncherPro/MainWindow.xaml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@
228228
<MenuItem x:Name="menuBatchBuildAndroid" Header="Android" Click="MenuBatchBuildAndroid_Click"/>
229229
<MenuItem x:Name="menuBatchBuildIOS" Header="IOS" Click="MenuBatchBuildIOS_Click"/>
230230
</MenuItem>
231+
<MenuItem Header="Tools">
232+
<MenuItem x:Name="menuExcludeFromDefender" Header="Exclude Path From Defender" Click="menuExcludeFromDefender_Click"/>
233+
</MenuItem>
231234
<Separator/>
232235
<MenuItem x:Name="menuRemoveProject" Header="Remove from recent list" Click="MenuRemoveProject_Click" />
233236
<!--<MenuItem x:Name="menuProjectProperties" Header="Properties..." Click="menuProjectProperties_Click" />-->
@@ -598,6 +601,9 @@
598601
<Button Style="{StaticResource CustomButton}" x:Name="btnOpenADBLogCat" Margin="10,0,0,0" BorderBrush="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" Click="BtnOpenADBLogCat_Click" ToolTip="Start ADB logcat commandline">
599602
<Label Content="_ADB logcat" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
600603
</Button>
604+
<Button Style="{StaticResource CustomButton}" x:Name="btnExcludeFolderForDefender" Margin="10,0,0,0" BorderBrush="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" ToolTip="Exclude all Editor folders from Windows Defender" Click="btnExcludeFolderForDefender_Click">
605+
<Label Content="Exclude Folders*" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}}" />
606+
</Button>
601607
</StackPanel>
602608
</Border>
603609
<!-- links -->

‎UnityLauncherPro/MainWindow.xaml.cs‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,6 +2187,8 @@ private void ChkStreamerMode_Checked(object sender, RoutedEventArgs e)
21872187
{
21882188
RefreshRecentProjects();
21892189
}
2190+
2191+
SetStatus("Streamer mode " + (isChecked ? "enabled" : "disabled"), MessageType.Info);
21902192
}
21912193

21922194
private void ChkShowPlatform_Checked(object sender, RoutedEventArgs e)
@@ -4030,7 +4032,41 @@ private void chkRegisterInstallAPKMenu_Checked(object sender, RoutedEventArgs e)
40304032

40314033
}
40324034

4035+
private void btnExcludeFolderForDefender_Click(object sender, RoutedEventArgs e)
4036+
{
4037+
var foldersToExclude = new List<string>();
4038+
foreach (var unity in unityInstallationsSource)
4039+
{
4040+
var unityEditorFolder = Path.GetDirectoryName(unity.Path);
4041+
//Console.WriteLine(unityEditorFolder);
4042+
if (Directory.Exists(unityEditorFolder))
4043+
{
4044+
foldersToExclude.Add(unityEditorFolder);
4045+
}
4046+
}
4047+
4048+
Tools.RunExclusionElevated(foldersToExclude);
4049+
}
40334050

4051+
private void menuExcludeFromDefender_Click(object sender, RoutedEventArgs e)
4052+
{
4053+
var proj = GetSelectedProject();
4054+
if (proj == null) return;
4055+
if (Directory.Exists(proj.Path) == false) return;
4056+
4057+
var foldersToExclude = new List<string>();
4058+
foldersToExclude.Add(proj.Path);
4059+
var res = Tools.RunExclusionElevated(foldersToExclude, silent: true);
4060+
var tempPath = ((chkStreamerMode.IsChecked == true) ? "***" : proj.Path);
4061+
if (res == false)
4062+
{
4063+
SetStatus("Failed to add exclusion for: " + tempPath);
4064+
}
4065+
else
4066+
{
4067+
SetStatus("Added exclusion for project path: " + tempPath);
4068+
}
4069+
}
40344070

40354071
//private void menuProjectProperties_Click(object sender, RoutedEventArgs e)
40364072
//{

‎UnityLauncherPro/Tools.cs‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2696,6 +2696,66 @@ internal static void InstallAPK(string ApkPath)
26962696
}
26972697
}
26982698

2699+
// exclude folders from windows defender
2700+
internal static bool RunExclusionElevated(IEnumerable<string> paths, bool silent = false)
2701+
{
2702+
var escapedPaths = new List<string>();
2703+
foreach (var rawPath in paths)
2704+
{
2705+
var path = rawPath.Trim();
2706+
string safePath = path.Replace("'", "''");
2707+
escapedPaths.Add($"'{safePath}'");
2708+
}
2709+
2710+
string joinedPaths = string.Join(", ", escapedPaths);
2711+
string psCommand = $"Add-MpPreference -ExclusionPath {joinedPaths}";
2712+
2713+
string fullCommand;
2714+
2715+
if (silent)
2716+
{
2717+
// No output, just run the command silently
2718+
fullCommand = psCommand;
2719+
}
2720+
else
2721+
{
2722+
// Show command and keep window open
2723+
var quotedPathsForDisplay = string.Join(", ", escapedPaths.ConvertAll(p => $"'{p.Trim('\'')}'"));
2724+
string displayCommand = $"Add-MpPreference -ExclusionPath {quotedPathsForDisplay}";
2725+
fullCommand = $"Write-Host 'Running: {displayCommand}'; {psCommand}; Write-Host ''; Write-Host 'Done. Press any key to exit...'; pause";
2726+
}
2727+
2728+
var startInfo = new ProcessStartInfo
2729+
{
2730+
FileName = "powershell.exe",
2731+
Arguments = silent
2732+
? $"-WindowStyle Hidden -Command \"{fullCommand}\""
2733+
: $"-NoExit -Command \"{fullCommand}\"",
2734+
UseShellExecute = true,
2735+
Verb = "runas", // Requires admin rights
2736+
WindowStyle = silent ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal
2737+
};
2738+
2739+
try
2740+
{
2741+
Process.Start(startInfo);
2742+
}
2743+
catch (Win32Exception)
2744+
{
2745+
if (!silent)
2746+
{
2747+
MessageBox.Show("Operation cancelled or failed due to insufficient privileges.", "Cancelled", MessageBoxButton.OK, MessageBoxImage.Warning);
2748+
}
2749+
return false;
2750+
}
2751+
2752+
return true;
2753+
}
2754+
2755+
2756+
2757+
2758+
26992759

27002760

27012761
} // class

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /