|
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Узнать ID компьютера
По долгу службы требуется узнать уникальный код компьютера, например md5(серийник_матери). Нужно для "регистрации" - то есть чтобы войти в приложение можно было по ключу, уникальному для каждого компьютера.
Встаёт вопрос, как это сделать и какую оболочку выбрать. Знающие люди говорят, что зинк - кривой и бажный, что то сделать без костылей на нём не получится и говорят смотреть в сторону air`а, однако проблема в том что запускаться ехешник (разработка только под вин) должен одним кликом, а установка эира и приложения сразу запрещена лицензией. Встаёт вопрос, как бы это делали Вы? Про то, что любая защита ломается я знаю. Выбор остался на флеше потому что из фич, недоступных флешу мне нужно только это. Добавлено через 2 часа 2 минуты По сути, самыми вменяемыми способами которые я смог нагуглить - это выборка из реестра, только не совсем понятно, откуда же. HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/SYSTEM говорит гугл, однако там нету серийников. Разве что Configuration data, только я в этом сомневаюсь. Другой способ - это WMI, вроде zinc поддерживает работу с ним. Будем пытаться, буду рад информации по теме. Добавлено через 4 часа 55 минут Выбор пал на расширение проектора от alexcon`а, однако нечто то что нужно мне у него не реализовано, разве что PSystem.getComputerInfo(), но это не совсем то. Цитата:
Добавлено через 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 PScript.initEngine(); if (!PScript.addScriptFromFile("script.txt")) PDialogs.msgBox(PScript.getScriptError()); var res:String = PScript.call("getSerial"); someTextField.text=res; PScript.terminateEngine(); Цитата:
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 26.07.2010 в 01:42. |
|
|||||
listener
|
Psycho Tiger, спасибо за информацию.
Баги поправил. По теме: WMI, да, рулит. Но, на моем компе скрипт не выводит серийник мамки, выводит пустоту. Так что закладываться на этот серийник не стоит. Почему так - видимо, модель мамки старовата или еще что-то. Вот objItem.Product выводит, но это типа модель. Наверно, будет правильней сгенерить свой уникальный ид на основе информации о нескольких девайсах, получить которую можно с помощью того же WMI, и записать этот ид в реестр или еще куда-то. Потом сверять. Еще можно как основу уникального ид взять какой-то системный GUID(это практически уникальная штука) из реестра, например HKCU\Identities\Default Udser ID или еще чего-нибудь.. Еще PScript.call("getSerial()");(скобки рекомендуется писать) Есть так же PFileSystem.getDiskInfo("c:"); возвратит объект, поле serial которого содержит серийник диска. И да, инфу о железе просто и безболезненно вынимать только через WMI. Есть и другие способы, но реализовать их на все случаи жизни я не счел нужным. Впрочем, если есть конкретный пожелания - озвучьте, рассмотрим и если гуд - внесем. UPD Добавил метод PRegistry.enumKey() для перечисления ключей в ветке Последний раз редактировалось alexcon314; 26.07.2010 в 13:57. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Отлично, спасибо за фиксы. Можно на "ты" перейдём? Не первый и не второй год на флешере общаемся.
Идея получить серийник материнки мне кажется наиболее правильной, т.к. это почти единственная неизменяемая часть компьютера, но видимо придется отказаться в сторону диска. По сути, инфу о железе вынимать периодически нужно, наверное, было бы здорово увидеть какой-нибудь интерфейс для WMI. Проще говоря, метод, который принимает строку SQL запрос. В итоге один метод для всего чего только можно. Добавлено через 12 минут Кстати, а PFileSystem.getDiskInfo("c:") содержит именно серийный номер диска, или серийный номер тома? Второе в моём случае совсем непригодно... У меня диск один, разбитый на 2 логических диска. Серийники для них разные, похоже, это правда серийник тома...
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 26.07.2010 в 12:54. |
|
|||||
listener
|
Насчет интерфейса для запросов WMI, ну что ж.. вобщем-то можно свой AS-класс-обертку написать, который юзает (или расширяет) PScript, формируя по какоЙ-то схеме стандартизованный запрос и вставляет его в шаблон скрипта)).
WMI - необъятная штука, сделать что-то лучше, чем имеющийся скриптовый интерфейс не представляется возможным. Вот кстати неплохая реализация на C# http://www.codeproject.com/KB/system...formation.aspx Собственно, я изначально старался уйти от "оберток", предоставляя доступ к АПИ системы на возможно низком уровне. Надо что-то свое - расширяйтесь. Примеры http://www.script-coding.info/WMI_HardWare.html Но идея с GUID мне кажется не менее плодотворной. GUID'ы назначаются при установке винды (или каких-то последующих глобальных пертурбациях, типа установки девайса, создания пользователей и т.п.). Так что уникальность тут тоже хорошая. И да, на ты, конечно. Добавлено через 3 часа 3 минуты Что-то зацепило меня.. вот еще фришная тулза http://www.winsim.com/diskid32/diskid32.html юзать примерно так: var str:String = PSystem.execStdOut("diskid32.exe"); и распарсить строку. Строка получается такого вида: Цитата:
Кстати и сорцы это штуки есть на сайте, можешь скомпилить под себя и юзать чисто то, что тебе нужно без лишнего мусора. Насколько я понял Цитата:
Думаю, это то, что надо. Последний раз редактировалось alexcon314; 26.07.2010 в 17:30. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Ага, спасибо, буду пробовать.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
listener
|
Еще небольшой довесок. Как Microsoft генерит коды активации.
|
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Ну, мы не для Air`а копаем. Если Air имеет какой нибудь шелл для запуска exe или скриптов как здесь - то без проблем, а так сомнительно)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Самое лучшее, что сейчас нам пришло в голову (точнее alexcon`у ) - это компилировать сишный код в exe, и через его обёртку вызывать метод, который выполнит этот exe и перехватит то, что он выплюнет, отдав во флешку. Air так не умеет. Ровно как и не умеет вызывать VBScript`ы для доступа к WMI...
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 16:13. |
|
« Предыдущая тема | Следующая тема » |
|
|