Статус: Новичок
Группы: Участники
Зарегистрирован: 02.02.2023(UTC) Сообщений: 1 Откуда: Хабаровск
|
Я у себя (на Windows) сделал установку Крипто Про 4 с автоустановкой лицензии с помощью Питона. Можно легко переделать и под 5 версию. Код преобразовать в exe с помощью Pyinstaller (или чем-то аналогичным). Опции Pyinstaller: --onefile, чтобы компилировалось в 1 файл. Чтобы работало и в 32 битных версиях Windows при компиляции следует использовать Питон 32 бита. А чтобы работало в Windows 7 версия Питона должна быть не выше 3.8. В папке с подготовленным exe должны лежать файл Крипто Про и папка с распакованным ЭЦП браузер-плагином (если не нужно ставить плагин - удалите секции 3.1 и 3.2 кода и папку cadesplugin) и файлик comp_lic_dict.txt с лицензиями вида: {'WS0010101':'4040NH0000010PDT856EAE000', 'WS0010102':'4040DB0000016YVXYE8K10000'} То, что лежит в папке - см. скриншот Bezymjannyjj.png (10kb) загружен 7 раз(а).Распространяю у себя по рабочим станциям с помощью Kaspersky Security Center. Код: Код:
Import os.path
from winreg import *
import wmi
import subprocess
wmi_obj = wmi.WMI()
# 1. Сносим КриптоПро 4
#############################################################################
try:
uninstall = subprocess.Popen('msiexec.exe /qb /qn /norestart /x {407E5BA7-6406-40BF-A4DC-3654B8F584C1}', shell=True)
uninstall.wait()
except:
print('не получилось удалить КриптоПро')
pass
# 2. Ставим КриптоПро 4
#############################################################################
try:
install = subprocess.Popen(['CSPSetup.exe', '/gm2', '/nodlg', '/silent', '/noreboot', '/args',
"/qb /qn"])
install.wait()
except:
print('Не получилось установить КриптоПро')
pass
# 3.1 Удаляем КриптоПро ЭЦП браузер-плагин
try:
remove_cades = subprocess.Popensubprocess.Popen('msiexec.exe /quiet /norestart /x {'
'E12CC7EE-36B7-4AAA-924E-2F5CD75BCECF}', shell=True)
remove_cades.wait()
except:
print('Не получилось удалить КриптоПро ЭЦП-браузер плагин')
pass
# 3.2 Ставим КриптоПро ЭЦП браузер-плагин
# Через orca отредактировать msi. На странице Property добавить CHROME_EXTENSION=1 и ADDNPCADES=1
try:
# Получаем архитектуру ОС, ставим плагин
wmi_sql_arch = "select AddressWidth from Win32_Processor where DeviceID=\"CPU0\""
wmi_out_arch = wmi_obj.query(wmi_sql_arch)
for arch in wmi_out_arch:
bit = arch.AddressWidth
if bit == 64:
install_cades64 = subprocess.Popen(['msiexec.exe', '/i', r'cadesplugin\cadescom\cadescom-x64.msi', '/quiet'])
install_cades64.wait()
else:
install_cades32 = subprocess.Popen(['msiexec.exe', '/i', r'cadesplugin\cadescom\cadescom-win32.msi', '/quiet'])
install_cades32.wait()
except:
print('Не получилось установить КриптоПро ЭЦП браузер-плагин')
pass
# 4. Прописываем лицензию КриптоПро, патчим
#############################################################################
# 4.1 Получаем имя компа
try:
for host in wmi_obj.Win32_ComputerSystem():
print(host.Name)
except:
print('Не удалось получить имя компа')
# 4.2 По имени компа получаем из словаря номер лицензии
comp_lic = {}
with open('comp_lic_dict.txt', 'r') as comp_lic_dict:
comp_lic = eval(comp_lic_dict.read())
print(comp_lic)
def dict_search(dictionary, key):
for k in dictionary:
if key in k:
return dictionary[k]
return None
# 4.3 Записываем значения в реестр
def regwrite(path, regtype, value, root=HKEY_LOCAL_MACHINE):
path, name = os.path.split(path)
with OpenKey(root, path, 0, KEY_WRITE | KEY_WOW64_64KEY) as key:
SetValueEx(key, name, 0, regtype, value)
try:
regwrite(r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products'
r'\7AB5E7046046FB044ACD63458B5F481C\InstallProperties\ProductID', REG_SZ, dict_search(comp_lic, host.Name))
print(dict_search(comp_lic, host.Name))
regwrite(r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products'
r'\7AB5E7046046FB044ACD63458B5F481C\InstallProperties\RegOwner', REG_SZ,
'\"Имя владельца\"')
regwrite(r'SYSTEM\CurrentControlSet\Control\Session Manager\CProPatches\Force', REG_DWORD, 0x00000001)
except:
print('Не удалось записать значения в реестр')
pass
# 5. Выводим сообщение пользователю
try:
for_user = subprocess.Popen('msg /time:36000 * На Вашем компьютере была обновлена программа КриптоПро. Пожалуйста, '
'перезагрузите компьютер. Без перезагрузки электронная подпись может не работать или '
'работать неправильно.', shell=True)
for_user.wait()
except:
pass
|