install gui
This commit is contained in:
parent
a622edb4ea
commit
6bc0bdbf61
1 changed files with 217 additions and 0 deletions
217
install.py
Normal file
217
install.py
Normal file
|
@ -0,0 +1,217 @@
|
|||
import tkinter as tk
|
||||
from tkinter import messagebox
|
||||
import ctypes
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
import platform
|
||||
|
||||
def is_admin():
|
||||
try:
|
||||
return ctypes.windll.shell32.IsUserAnAdmin()
|
||||
except:
|
||||
return False
|
||||
|
||||
if not is_admin():
|
||||
ctypes.windll.shell32.ShellExecuteW(
|
||||
None, "runas", sys.executable, " ".join(sys.argv), None, 1)
|
||||
sys.exit()
|
||||
|
||||
class Privacy11Installer:
|
||||
def __init__(self, root):
|
||||
self.root = root
|
||||
self.root.title("Privacy11 Installer")
|
||||
self.root.geometry("600x400")
|
||||
self.root.configure(bg="#121212")
|
||||
self.big_font = ("Segoe UI", 20, "bold")
|
||||
self.normal_font = ("Segoe UI", 12)
|
||||
|
||||
self.frame = tk.Frame(self.root, bg="#121212")
|
||||
self.frame.pack(expand=True, fill='both')
|
||||
|
||||
self.os_version_string, self.win_version = self.get_os_version_string()
|
||||
if not self.is_supported_os():
|
||||
messagebox.showerror(
|
||||
"Unsupported OS",
|
||||
f"Detected: {self.os_version_string}\n\nPrivacy11 only works on Windows 10 and 11."
|
||||
)
|
||||
sys.exit()
|
||||
|
||||
self.os_edition = self.detect_edition()
|
||||
self.show_welcome_page()
|
||||
|
||||
def clear_frame(self):
|
||||
for widget in self.frame.winfo_children():
|
||||
widget.destroy()
|
||||
|
||||
def get_os_version_string(self):
|
||||
release = platform.release()
|
||||
win_ver = sys.getwindowsversion()
|
||||
return f"Windows {release} (build {win_ver.build})", release
|
||||
|
||||
def is_supported_os(self):
|
||||
return self.win_version in ['10', '11']
|
||||
|
||||
def show_welcome_page(self):
|
||||
self.clear_frame()
|
||||
|
||||
welcome = tk.Label(
|
||||
self.frame,
|
||||
text="Welcome to the Privacy11 installer",
|
||||
font=self.big_font,
|
||||
fg="white",
|
||||
bg="#121212"
|
||||
)
|
||||
welcome.pack(pady=20)
|
||||
|
||||
desc = tk.Label(
|
||||
self.frame,
|
||||
text="Privacy11 is a Windows modification tool that gives a sense of privacy in Windows.",
|
||||
font=self.normal_font,
|
||||
fg="white",
|
||||
bg="#121212",
|
||||
wraplength=500,
|
||||
justify="center"
|
||||
)
|
||||
desc.pack(pady=20)
|
||||
|
||||
version_label = tk.Label(
|
||||
self.frame,
|
||||
text=f"Detected OS: {self.os_version_string}",
|
||||
font=self.normal_font,
|
||||
fg="green",
|
||||
bg="#121212"
|
||||
)
|
||||
version_label.pack(pady=5)
|
||||
|
||||
edition_label = tk.Label(
|
||||
self.frame,
|
||||
text=f"Detected Edition: {self.os_edition}",
|
||||
font=self.normal_font,
|
||||
fg="green",
|
||||
bg="#121212"
|
||||
)
|
||||
edition_label.pack(pady=5)
|
||||
|
||||
next_btn = tk.Button(
|
||||
self.frame,
|
||||
text="Next",
|
||||
command=self.show_actions_page,
|
||||
bg="#1E88E5",
|
||||
fg="white",
|
||||
activebackground="#1565C0",
|
||||
padx=20,
|
||||
pady=10
|
||||
)
|
||||
next_btn.pack(pady=40)
|
||||
|
||||
def show_actions_page(self):
|
||||
self.clear_frame()
|
||||
|
||||
title = tk.Label(
|
||||
self.frame,
|
||||
text="The installer will:",
|
||||
font=self.big_font,
|
||||
fg="white",
|
||||
bg="#121212"
|
||||
)
|
||||
title.pack(pady=20)
|
||||
|
||||
actions = [
|
||||
"• Disable Windows Updates and debloat the OS",
|
||||
"• Disable Services related to Telemetry",
|
||||
"• Apply a custom hosts file, blocking all Microsoft's spyware attempts."
|
||||
]
|
||||
|
||||
for action in actions:
|
||||
lbl = tk.Label(
|
||||
self.frame,
|
||||
text=action,
|
||||
font=self.normal_font,
|
||||
fg="white",
|
||||
bg="#121212",
|
||||
anchor="w",
|
||||
justify="left"
|
||||
)
|
||||
lbl.pack(anchor="w", padx=50)
|
||||
|
||||
next_btn = tk.Button(
|
||||
self.frame,
|
||||
text="Next",
|
||||
command=self.confirm_install,
|
||||
bg="#1E88E5",
|
||||
fg="white",
|
||||
activebackground="#1565C0",
|
||||
padx=20,
|
||||
pady=10
|
||||
)
|
||||
next_btn.pack(pady=40)
|
||||
|
||||
def confirm_install(self):
|
||||
answer = messagebox.askyesno(
|
||||
"Confirm", "Do you want to install Privacy11?")
|
||||
if answer:
|
||||
self.create_restore_point()
|
||||
self.run_proper_batch()
|
||||
|
||||
def create_restore_point(self):
|
||||
try:
|
||||
subprocess.run([
|
||||
"powershell",
|
||||
"-Command",
|
||||
"Checkpoint-Computer -Description 'Privacy11 Restore Point' -RestorePointType 'MODIFY_SETTINGS'"
|
||||
], check=True)
|
||||
except subprocess.CalledProcessError:
|
||||
messagebox.showwarning("Restore Point", "Failed to create restore point.")
|
||||
|
||||
def detect_edition(self):
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["powershell", "-Command", "(Get-WmiObject -Class Win32_OperatingSystem).OperatingSystemSKU"],
|
||||
capture_output=True, text=True, check=True
|
||||
)
|
||||
sku = int(result.stdout.strip())
|
||||
ltsc_skus = [125, 126, 188, 189]
|
||||
if sku in ltsc_skus:
|
||||
return "LTSC"
|
||||
else:
|
||||
return "Regular"
|
||||
except:
|
||||
return "Unknown"
|
||||
|
||||
def run_proper_batch(self):
|
||||
if self.win_version == "10":
|
||||
folder = "w10"
|
||||
elif self.win_version == "11":
|
||||
folder = "w11"
|
||||
else:
|
||||
messagebox.showerror("Error", "Unsupported Windows version detected at install stage.")
|
||||
return
|
||||
|
||||
batch_name = "ltsc_batch.bat" if self.os_edition == "LTSC" else "regular_batch.bat"
|
||||
batch_file = os.path.join("C:\\Privacy11", folder, batch_name)
|
||||
|
||||
if not os.path.exists(batch_file):
|
||||
messagebox.showerror("Error", f"{batch_file} not found!")
|
||||
return
|
||||
|
||||
try:
|
||||
subprocess.run(["cmd", "/c", batch_file], check=True)
|
||||
messagebox.showinfo("Reboot", "A reboot is required to complete installation. Click OK to reboot.")
|
||||
self.root.after(100, self.reboot_system)
|
||||
except subprocess.CalledProcessError:
|
||||
messagebox.showerror("Error", f"An error occurred while running {batch_file}")
|
||||
self.root.quit()
|
||||
|
||||
def reboot_system(self):
|
||||
try:
|
||||
subprocess.run(["shutdown", "/r", "/t", "0"], check=True)
|
||||
except subprocess.CalledProcessError:
|
||||
messagebox.showerror("Error", "Failed to reboot system.")
|
||||
self.root.quit()
|
||||
|
||||
if __name__ == "__main__":
|
||||
root = tk.Tk()
|
||||
app = Privacy11Installer(root)
|
||||
root.mainloop()
|
||||
|
Loading…
Add table
Reference in a new issue