2016-06-02 7 views
1

Я хочу выпустить скрипт DM, привязанный к определенному ПК. лицензия GMS не будет работать, потому что свободная лицензия имеет общий ИД лицензии,Как читать информацию о ПК с помощью сценария DM

"GATAN_FREE" 

Как я могу вставить секретный код, чтобы дать сообщение об ошибке, когда скрипт работает на другой машине? Я думаю использовать имя компьютера или имя пользователя. Есть ли способ прочитать системные переменные Windows? Если используется

LaunchExternalProcessAsync(callString) 

для запуска команды DOS «echo -username», как поймать выход? Какие-либо решения или предложения?

ответ

0

Nice мышления. Трюк с LaunchExternalProcess заключается в создании некоторой полезной строки, которая может быть «выполнена». Вы можете попробовать различные приложения с их собственными параметрами командной строки.


В наиболее общей ситуации вы можете создать файл-макет и выполнить его. (При условии, что у вас есть доступ на чтение/запись на компьютере!)

Так как LaunchExternalProcess также возвращает код выхода из запущенного процесса, вы можете, по крайней мере, передать обратно одну целую переменную напрямую. В противном случае вам нужно сохранить файл пакета в файл и прочитать DM этот файл.

// Temporary batch file creation 
    string batchPath = "C:\\Dummy.bat" 
    string batchText 

    string auxFilePath = "C:\\tmp_dummy.txt" 
    batchText += "dir *.* >> " + auxFilePath + "\n" 
    batchText += "exit 999" + "\n" 

// Ensure no files exist... 
    if (DoesFileExist(auxFilePath)) 
     DeleteFile(auxFilePath) 

    if (DoesFileExist(batchPath)) 
     DeleteFile(batchPath) 

// Write the batch file.... 
    number fileID = CreateFileForWriting(batchPath) 
    WriteFile(fileID,batchText) 
    CloseFile(fileID) 

// Call the batch file and retrieve its exit code 
    number kTimeOutSec = 5  // Prevent freezing of DM if something in the batch file is wrong 
    number exitCode = LaunchExternalProcess(batchPath, kTimeOutSec) 

// Do something with the results 
    Result("\n Exit value of batch was:" + exitCode) 
    if (DoesFileExist(auxFilePath)) 
    { 
     string line 
     fileID = OpenFileForReading(auxFilePath) 
     ReadFileLine(fileID, line) 
     CloseFile(fileID) 
     Result("\n First line of auxiliary file:" + line) 
    } 

// Ensure no files exist... 
    if (DoesFileExist(auxFilePath)) 
     DeleteFile(auxFilePath) 

    if (DoesFileExist(batchPath)) 
     DeleteFile(batchPath) 
+0

Спасибо, BmyGuest! Да, запись данных в файл дает полный доступ к сценарию DM к выходу. Хороший трюк. – user6406828

0

Это не является прямым ответом на ваш вопрос, но к общей цели, которую вы уже упоминали.

Альтернативное решение «Только DM» для ограничения доступа к скрипту должно заключаться в использовании постоянных тегов самого приложения! (Они хранятся в настройках приложения.)


string tagPath = "MyScripts:LicensedComputer" 
string installPW = "password"     

string mayLoadPassCode = "" 
GetPersistentStringNote(tagPath, mayLoadPassCode) 
if (mayLoadPassCode != installPW) 
{ 
    string pw 
    if (!GetString("Forbidden.\n Enter password:", pw, pw)) 
     exit(0) 

    if (pw != installPW) 
     Throw("Invalid password.") 

    SetPersistentStringNote(tagPath, pw) 
} 

OKDialog("You may use my script...") 

Очевидно, что это не самый безопасный локаут, так как любой пользователь может установить тег вручную, как хорошо, но до тех пор, как tag-path является «секретным», и пароль остается «секретным» (т. е. вы не используете сценарий в исходном коде), он разумно «сохраняет».

Аналогичным образом вы можете сделать свой сценарий записью на компьютер определенного «лицензионного» файла и проверять его каждый раз. Преимущество заключается в том, что удаление/сброс файла предпочтений DM не повлияет на это.

 Смежные вопросы

  • Нет связанных вопросов^_^