如何使用DM脚本读取PC信息

时间:2016-06-02 04:43:24

标签: dm-script

我想发布一个绑定到特定PC的DM脚本。 GMS许可证不起作用,因为免费许可证具有通用许可证ID,

"GATAN_FREE"

当脚本在另一台计算机上运行时,如何插入密码以提供错误消息? 我想使用计算机名或用户名。有没有办法读取Windows系统变量?如果使用

LaunchExternalProcessAsync(callString)

启动DOS命令“echo -username”,如何捕获输出? 任何解决方案或建议?

2 个答案:

答案 0 :(得分:0)

好的想法。 使用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)

答案 1 :(得分: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..." )

显然这不是最安全的锁定,因为任何用户也可以手动设置标签,但只要标签路径是“秘密”并且密码保持“秘密”(即你不是在源代码中共享脚本)它是合理的“保存”。

以类似的方式,您可以让脚本将特定的“许可证”文件写入计算机并每次检查一次。优点是,删除/重置DM首选项文件不会影响这一点。