По долгу службы требуется узнать уникальный код компьютера, например md5(серийник_матери). Нужно для "регистрации" - то есть чтобы войти в приложение можно было по ключу, уникальному для каждого компьютера.
Встаёт вопрос, как это сделать и какую оболочку выбрать. Знающие люди говорят, что зинк - кривой и бажный, что то сделать без костылей на нём не получится и говорят смотреть в сторону air`а, однако проблема в том что запускаться ехешник (разработка только под вин) должен одним кликом, а установка эира и приложения сразу запрещена лицензией. Встаёт вопрос, как бы это делали Вы?
Про то, что любая защита ломается я знаю. Выбор остался на флеше потому что из фич, недоступных флешу мне нужно только это.
Добавлено через 2 часа 2 минуты
По сути, самыми вменяемыми способами которые я смог нагуглить - это выборка из реестра, только не совсем понятно, откуда же.
HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/SYSTEM говорит гугл, однако там нету серийников. Разве что Configuration data, только я в этом сомневаюсь.
Другой способ - это WMI, вроде zinc поддерживает работу с ним. Будем пытаться, буду рад информации по теме.
Добавлено через 4 часа 55 минут
Выбор пал на расширение проектора от alexcon`а, однако нечто то что нужно мне у него не реализовано, разве что PSystem.getComputerInfo(), но это не совсем то.
Цитата:
name=>MICROSOF-CA89DF
platformId=>500
lanRoot=>
loggedUsers=>2
lanGroup=>WORKGROUP
|
Буду биться дальше, подумываю над вызовом VBScript.
Добавлено через 7 часов 28 минут
Да, получилось! Вызов WMI из VBScript, работает как надо.
script.txt
Код:
Option Explicit
Function getSerial()
Dim objWMIService, objItem, colItems
Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
getSerial=objItem.SerialNumber
Next
End Function
Возвращаем первый из тех, что берём перебором. Пахнет быдлокодом, но VBScript я не знаю и это работоспособно. Это уже хорошо.
Код AS3:
PScript.initEngine();
if (!PScript.addScriptFromFile("script.txt")) PDialogs.msgBox(PScript.getScriptError());
var res:String = PScript.call("getSerial");
someTextField.text=res;
PScript.terminateEngine();
При закрытии всё равно всплывает ошибка:
Цитата:
Инструкция по адресу "0x10020a15" обратилась к памяти по адресу "0x58761460". Память не может быть "read".
|
Заодно заметил, что если не сделать initEngine перед тем, как добавлять скрипт - это крашит флешплеер)