From 6bc0bdbf6148e792c10f5b3176e0f877003ed99e Mon Sep 17 00:00:00 2001 From: blackctac Date: Tue, 12 Aug 2025 19:35:12 +0000 Subject: [PATCH] install gui --- install.py | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 install.py diff --git a/install.py b/install.py new file mode 100644 index 0000000..96d60ba --- /dev/null +++ b/install.py @@ -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() +