Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

Commit 1058377

Browse files
committed
Add uninstaller
1 parent c9dd103 commit 1058377

File tree

10 files changed

+145
-19
lines changed

10 files changed

+145
-19
lines changed

Clab.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ VisualStudioVersion = 16.0.31005.135
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Clab", "Clab\Clab.csproj", "{A1DAA0BC-658A-4091-BBAC-87B7F95E41EE}"
66
EndProject
7+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClabUninstall", "ClabUninstall\ClabUninstall.csproj", "{7BAC2917-ED21-47EA-91A4-05E04D648EDA}"
8+
EndProject
79
Global
810
GlobalSection(SolutionConfigurationPlatforms) = preSolution
911
Debug|Any CPU = Debug|Any CPU
@@ -14,6 +16,10 @@ Global
1416
{A1DAA0BC-658A-4091-BBAC-87B7F95E41EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
1517
{A1DAA0BC-658A-4091-BBAC-87B7F95E41EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
1618
{A1DAA0BC-658A-4091-BBAC-87B7F95E41EE}.Release|Any CPU.Build.0 = Release|Any CPU
19+
{7BAC2917-ED21-47EA-91A4-05E04D648EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
20+
{7BAC2917-ED21-47EA-91A4-05E04D648EDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
21+
{7BAC2917-ED21-47EA-91A4-05E04D648EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
22+
{7BAC2917-ED21-47EA-91A4-05E04D648EDA}.Release|Any CPU.Build.0 = Release|Any CPU
1723
EndGlobalSection
1824
GlobalSection(SolutionProperties) = preSolution
1925
HideSolutionNode = FALSE

Clab/Clab.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<TargetFramework>netcoreapp3.1</TargetFramework>
66
<UseWindowsForms>true</UseWindowsForms>
77
<Version>0.0.1</Version>
8+
<ApplicationIcon>images\icons\app\plastic-cup.ico</ApplicationIcon>
9+
<StartupObject />
810
</PropertyGroup>
911

1012
<ItemGroup>

Clab/network/network.cs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ public static void grant_firewall_rules()
3535

3636
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
3737

38-
INetFwRule firewallRules = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => (x.Name == "ClabSignals") &&
39-
(x.Name == "ClabMessages") &&
40-
(x.Name == "ClabFiles")).FirstOrDefault();
38+
bool firewallRules = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => (x.Name == "ClabSignals") ||
39+
(x.Name == "ClabMessages") ||
40+
(x.Name == "ClabFiles")).Count() == 3;
4141

42-
if (firewallRules == null)
42+
if (!firewallRules)
4343
{
4444
Common.run_as_admin();
4545

@@ -95,32 +95,41 @@ public static partial class Common
9595
{
9696
public static bool is_admin()
9797
{
98-
WindowsIdentity id = WindowsIdentity.GetCurrent();
99-
WindowsPrincipal principal = new WindowsPrincipal(id);
98+
bool admin;
10099

101-
return principal.IsInRole(WindowsBuiltInRole.Administrator);
100+
try
101+
{
102+
WindowsIdentity id = WindowsIdentity.GetCurrent();
103+
WindowsPrincipal principal = new WindowsPrincipal(id);
104+
admin = principal.IsInRole(WindowsBuiltInRole.Administrator);
105+
}
106+
catch (Exception)
107+
{
108+
admin = false;
109+
}
110+
111+
return admin;
102112
}
103113

104114
public static void run_as_admin()
105115
{
106116
if (!is_admin())
107117
{
108-
ProcessStartInfo proc = new ProcessStartInfo();
109-
proc.UseShellExecute = false;
110-
proc.WorkingDirectory = Environment.CurrentDirectory;
111-
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
112-
proc.Verb = "runas";
118+
Process proc = new Process();
119+
proc.StartInfo.Verb = "runas";
120+
proc.StartInfo.UseShellExecute = true;
121+
proc.StartInfo.FileName = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, ".exe");
113122

114123
try
115124
{
116-
Process.Start(proc);
125+
proc.Start();
117126
}
118127
catch (Exception)
119128
{
120-
MessageBox.Show("Please run Clab as administrator this time. This is required to configure the firewall");
129+
MessageBox.Show("Please run Clab as administrator next time. This is required to configure the firewall");
121130
}
122131

123-
Application.Exit();
132+
Environment.Exit(0);
124133
}
125134
}
126135

Clab/network/signals.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,13 @@ public static partial class Network
3333
static List<TcpClient> files;
3434
static readonly object filesLock = new object();
3535

36-
static Network()
36+
public static void run()
3737
{
3838
signals = new UdpClient();
3939
signals.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
4040
signals.Client.Bind(new IPEndPoint(IPAddress.Any, ports["signals"]));
4141
signals.JoinMulticastGroup(signalsIP, IPAddress.Parse(Network.IP));
42-
}
4342

44-
public static void run()
45-
{
4643
// if the network is silent for 5 seconds, the PC becomes a server
4744
Task.Delay(5000).ContinueWith(timer => run_server());
4845

ClabUninstall/ClabUninstall.csproj

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
<ApplicationManifest>app.manifest</ApplicationManifest>
7+
<Version>0.0.1</Version>
8+
<ApplicationIcon>icon\uninstall.ico</ApplicationIcon>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<COMReference Include="NetFwTypeLib">
13+
<VersionMinor>0</VersionMinor>
14+
<VersionMajor>1</VersionMajor>
15+
<Guid>58fbcf7c-e7a9-467c-80b3-fc65e8fcca08</Guid>
16+
<Lcid>0</Lcid>
17+
<WrapperTool>tlbimp</WrapperTool>
18+
<Isolated>false</Isolated>
19+
<EmbedInteropTypes>true</EmbedInteropTypes>
20+
</COMReference>
21+
</ItemGroup>
22+
23+
</Project>

ClabUninstall/app.manifest

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
3+
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
4+
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
5+
<security>
6+
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
7+
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
8+
</requestedPrivileges>
9+
</security>
10+
</trustInfo>
11+
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
12+
<application>
13+
</application>
14+
</compatibility>
15+
</assembly>

ClabUninstall/icon/uninstall.ico

105 KB
Binary file not shown.

ClabUninstall/icon/uninstall.svg

Lines changed: 19 additions & 0 deletions
Loading

ClabUninstall/uninstall.cmd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@echo off
2+
set filepath=%1
3+
cd ..
4+
start cmd.exe /k "timeout 2 > NUL && rmdir /s /q %filepath%"

ClabUninstall/uninstall.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.IO;
3+
using NetFwTypeLib;
4+
using System.Reflection;
5+
using System.Diagnostics;
6+
7+
namespace ClabUninstall
8+
{
9+
class Uninstaller
10+
{
11+
static void remove_firewall_rules()
12+
{
13+
Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
14+
INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
15+
var currentProfiles = fwPolicy2.CurrentProfileTypes;
16+
17+
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
18+
19+
foreach (INetFwRule rule in fwPolicy2.Rules)
20+
{
21+
if (rule.Name == "ClabSignals" || rule.Name == "ClabMessages" || rule.Name == "ClabFiles")
22+
{
23+
try
24+
{
25+
firewallPolicy.Rules.Remove(rule.Name);
26+
Console.WriteLine($"{rule.Name} has been remove from Firewall Policy");
27+
}
28+
catch (Exception) { }
29+
}
30+
}
31+
}
32+
33+
static void run_cmd_uninstaller()
34+
{
35+
string directory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
36+
37+
Process proc = new Process();
38+
proc.StartInfo.Verb = "runas";
39+
proc.StartInfo.UseShellExecute = true;
40+
proc.StartInfo.Arguments = $"{directory}";
41+
proc.StartInfo.FileName = Path.Combine(directory, "uninstall.cmd");
42+
proc.Start();
43+
}
44+
45+
static void Main()
46+
{
47+
remove_firewall_rules();
48+
run_cmd_uninstaller();
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)