init commit
This commit is contained in:
63
downloader_copier.py
Normal file
63
downloader_copier.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
def get_non_c_drive() -> str:
|
||||||
|
"""
|
||||||
|
پیدا کردن اولین درایو دسترس غیر از C در سیستم مقصد
|
||||||
|
"""
|
||||||
|
possible_drives = [f"{letter}:\\" for letter in "DEFGH"]
|
||||||
|
for drive in possible_drives:
|
||||||
|
if os.path.exists(drive):
|
||||||
|
return drive
|
||||||
|
return r"C:\\"
|
||||||
|
|
||||||
|
def setup_directories_and_copy(source_dir: str = r"C:\SoftwareNP",
|
||||||
|
target_drive: str = None) -> str:
|
||||||
|
"""
|
||||||
|
ایجاد پوشهها در درایوی غیر از C و کپی فایلها از مبدا به NovinSoft
|
||||||
|
"""
|
||||||
|
if not target_drive:
|
||||||
|
base_drive = get_non_c_drive()
|
||||||
|
else:
|
||||||
|
base_drive = target_drive
|
||||||
|
|
||||||
|
# تغییر نام پوشه اصلی به NovinPardazOne
|
||||||
|
base_target_dir = os.path.join(base_drive, "NovinPardazOne")
|
||||||
|
acc_dir = os.path.join(base_target_dir, "NovinAcc")
|
||||||
|
soft_dir = os.path.join(base_target_dir, "NovinSoft")
|
||||||
|
|
||||||
|
print(f"[+] درایو مقصد انتخاب شده: {base_drive}")
|
||||||
|
print(f"[+] در حال ایجاد ساختار پوشهها در مسیر {base_target_dir} ...")
|
||||||
|
|
||||||
|
# ساخت پوشههای NovinAcc و NovinSoft
|
||||||
|
os.makedirs(acc_dir, exist_ok=True)
|
||||||
|
os.makedirs(soft_dir, exist_ok=True)
|
||||||
|
print(" [✓] پوشههای NovinAcc و NovinSoft با موفقیت ایجاد شدند.")
|
||||||
|
|
||||||
|
# کپی محتویات پوشه مبدا به NovinSoft
|
||||||
|
if os.path.exists(source_dir):
|
||||||
|
print(f"[+] در حال کپی فایلها از {source_dir} به {soft_dir} ...")
|
||||||
|
|
||||||
|
for item in os.listdir(source_dir):
|
||||||
|
s = os.path.join(source_dir, item)
|
||||||
|
d = os.path.join(soft_dir, item)
|
||||||
|
|
||||||
|
if os.path.isdir(s):
|
||||||
|
shutil.copytree(s, d, dirs_exist_ok=True)
|
||||||
|
else:
|
||||||
|
shutil.copy2(s, d)
|
||||||
|
|
||||||
|
print(f" [✓] تمام فایلها با موفقیت در پوشه {soft_dir} کپی شدند.")
|
||||||
|
return soft_dir
|
||||||
|
else:
|
||||||
|
raise FileNotFoundError(f"[-] پوشه مبدا در مسیر {source_dir} یافت نشد!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
os.system("chcp 65001 > nul")
|
||||||
|
print("--- تست ماژول ایجاد پوشهها و کپی نرمافزار ---")
|
||||||
|
|
||||||
|
try:
|
||||||
|
target_path = setup_directories_and_copy(target_drive=r"D:\\")
|
||||||
|
print(f"\nعملیات با موفقیت به پایان رسید. مسیر نرمافزار: {target_path}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"\n[-] خطا: {e}")
|
||||||
50
extract_acc.py
Normal file
50
extract_acc.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
def extract_acc_archive(base_drive: str = r"D:\\") -> str:
|
||||||
|
# تغییر نام پوشه اصلی به NovinPardazOne
|
||||||
|
base_dir = os.path.join(base_drive, "NovinPardazOne")
|
||||||
|
soft_dir = os.path.join(base_dir, "NovinSoft")
|
||||||
|
acc_dir = os.path.join(base_dir, "NovinAcc")
|
||||||
|
|
||||||
|
target_zip_name = "NovinAcc.zip"
|
||||||
|
source_zip_path = os.path.join(soft_dir, target_zip_name)
|
||||||
|
target_zip_path = os.path.join(acc_dir, target_zip_name)
|
||||||
|
|
||||||
|
# ۱. بررسی وجود پوشه NovinSoft
|
||||||
|
if not os.path.exists(soft_dir):
|
||||||
|
raise FileNotFoundError(f"[-] پوشه یافت نشد: {soft_dir}")
|
||||||
|
|
||||||
|
# ۲. بررسی وجود فایل زیپ
|
||||||
|
if not os.path.exists(source_zip_path):
|
||||||
|
raise FileNotFoundError(f"[-] فایل {target_zip_name} در پوشه {soft_dir} پیدا نشد!")
|
||||||
|
|
||||||
|
# ۳. ایجاد پوشه NovinAcc در صورت عدم وجود
|
||||||
|
os.makedirs(acc_dir, exist_ok=True)
|
||||||
|
|
||||||
|
# ۴. انتقال فایل زیپ به NovinAcc
|
||||||
|
print(f"[+] در حال انتقال {target_zip_name} به پوشه NovinAcc...")
|
||||||
|
shutil.move(source_zip_path, target_zip_path)
|
||||||
|
print(" [✓] فایل زیپ منتقل شد.")
|
||||||
|
|
||||||
|
# ۵. استخراج فایل از حالت فشرده
|
||||||
|
print(f"[+] در حال آنزیپ کردن در {acc_dir}...")
|
||||||
|
with zipfile.ZipFile(target_zip_path, 'r') as zip_ref:
|
||||||
|
zip_ref.extractall(acc_dir)
|
||||||
|
print(" [✓] تمام فایلها با موفقیت آنزیپ شدند.")
|
||||||
|
|
||||||
|
# ۶. حذف فایل زیپ موقت
|
||||||
|
if os.path.exists(target_zip_path):
|
||||||
|
os.remove(target_zip_path)
|
||||||
|
print(" [✓] فایل زیپ موقت پاک شد.")
|
||||||
|
|
||||||
|
return acc_dir
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
os.system("chcp 65001 > nul")
|
||||||
|
print("--- در حال اجرای ماژول انتقال و آنزیپ ---")
|
||||||
|
try:
|
||||||
|
extract_acc_archive(base_drive=r"D:\\")
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
71
install_novindesk.py
Normal file
71
install_novindesk.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import os
|
||||||
|
import zipfile
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
|
def install_novindesk(base_drive: str = r"D:\\") -> str:
|
||||||
|
"""
|
||||||
|
استخراج و نصب خودکار NovinDesk با پیمایش دقیق فرم نصب
|
||||||
|
"""
|
||||||
|
base_dir = os.path.join(base_drive, "NovinPardazOne")
|
||||||
|
soft_dir = os.path.join(base_dir, "NovinSoft")
|
||||||
|
|
||||||
|
zip_filename = "NovinDesk.zip"
|
||||||
|
source_zip_path = os.path.join(soft_dir, zip_filename)
|
||||||
|
extract_target_dir = os.path.join(soft_dir, "NovinDesk")
|
||||||
|
|
||||||
|
if not os.path.exists(source_zip_path):
|
||||||
|
raise FileNotFoundError(f"[-] فایل {zip_filename} در پوشه {soft_dir} پیدا نشد!")
|
||||||
|
|
||||||
|
os.makedirs(extract_target_dir, exist_ok=True)
|
||||||
|
|
||||||
|
print(f"[+] در حال آنزیپ کردن {zip_filename} ...")
|
||||||
|
with zipfile.ZipFile(source_zip_path, 'r') as zip_ref:
|
||||||
|
zip_ref.extractall(extract_target_dir)
|
||||||
|
print(" [✓] آنزیپ با موفقیت انجام شد.")
|
||||||
|
|
||||||
|
exe_file = None
|
||||||
|
for root, dirs, files in os.walk(extract_target_dir):
|
||||||
|
for file in files:
|
||||||
|
if file.lower().endswith(".exe"):
|
||||||
|
exe_file = os.path.join(root, file)
|
||||||
|
break
|
||||||
|
|
||||||
|
if not exe_file:
|
||||||
|
raise FileNotFoundError("[-] هیچ فایل اجرایی (.exe) یافت نشد!")
|
||||||
|
|
||||||
|
print(f"[+] در حال اجرای فرم نصب {os.path.basename(exe_file)} ...")
|
||||||
|
|
||||||
|
# اجرای برنامه جهت نصب
|
||||||
|
subprocess.Popen([exe_file, "--install"])
|
||||||
|
|
||||||
|
# ۵ ثانیه صبر برای بارگذاری کامل پنجره
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import pyautogui
|
||||||
|
|
||||||
|
# ۱. بسته شدن هرگونه پنجره جانبی فرعی
|
||||||
|
pyautogui.press('escape')
|
||||||
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
# ۲. پیمایش دقیق با ۴ بار Tab برای رسیدن مستقیم به دکمه «قبول و شروع نصب»
|
||||||
|
for _ in range(4):
|
||||||
|
pyautogui.press('tab')
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
# ۳. فشردن کلید Enter روی دکمه نصب
|
||||||
|
pyautogui.press('enter')
|
||||||
|
print(" [✓] تایید و نصب خودکار شروع شد.")
|
||||||
|
except Exception as err:
|
||||||
|
print(f" [-] خطای اتوماسیون: {err}")
|
||||||
|
|
||||||
|
return exe_file
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
os.system("chcp 65001 > nul")
|
||||||
|
print("--- اجرای ماژول نصب NovinDesk ---")
|
||||||
|
try:
|
||||||
|
install_novindesk(base_drive=r"D:\\")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[-] خطا: {e}")
|
||||||
16
run.py
Normal file
16
run.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import subprocess
|
||||||
|
|
||||||
|
# لیست فایلها به ترتیب اجرا
|
||||||
|
scripts = ["downloader_copier.py", "extract_acc.py", "install_novindesk.py"]
|
||||||
|
|
||||||
|
for script in scripts:
|
||||||
|
print(f"در حال اجرای {script}...")
|
||||||
|
# اجرای فایل و انتظار برای اتمام آن
|
||||||
|
result = subprocess.run(["python", script], capture_output=True, text=True)
|
||||||
|
|
||||||
|
if result.returncode == 0:
|
||||||
|
print(f"{script} با موفقیت اجرا شد.\n")
|
||||||
|
else:
|
||||||
|
print(f"خطا در اجرای {script}:")
|
||||||
|
print(result.stderr)
|
||||||
|
break # اگر خطایی رخ داد، ادامه روند متوقف شود
|
||||||
BIN
sciter.dll
Normal file
BIN
sciter.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user