自定義庫模塊增加自定義許可操作詳細方法
用到的工具:
后面程序用到的所有代碼均是該工具生成的秘密!!!!
【切記切記!!! 一定要記住密碼,不然如果你想將庫的許可認證移除,則無法無法實現】
關鍵字認識:
1、setRequiredLicense
setRequiredLicense【設置庫記載時檢查秘鑰,如果秘鑰錯誤或版本錯誤或時間過期均無法加載秘鑰】
案例演示:
--策略功能說明:
--配置庫秘鑰檢查【如果秘鑰不對則直接加載失敗】
-------------------------------------------------------------------------------------Called By :--Calls :--Author:Yechaocheng--CreateDate : 2025/05/17 10:20:35.3210
-------------------------------------------------------------------------------------History:--2025/05/17 KM SimTalk 2.0
-----------------------------------------------------------------------------------
-->USER CODE BEGIN
-----------------------------------------------------------------------------------
RootFolder.setRequiredLicense("AHRF_KEYGEN","1.0.0","18D77674-23E1-4329-B470-F58E8DC59B17","","安徽銳鋒科技秘鑰管理:提醒您請聯系您的服務商獲取許可證!請從(文件 > 首選項 > 許可證下單擊查詢主機 ID)獲取HostID 并提供給服務商!")
-----------------------------------------------------------------------------------
-->USER CODE End
-----------------------------------------------------------------------------------
官方說明:
setRequiredLicense [SimTalk]
語法
.setRequiredLicense(Feature:string, Version:string, Password:string[, FreeInLicense:string, Comment:string, PreviousPasswordForUpdate:string])
描述
方法 setRequiredLicense 用于告知 指定的庫文件夾請求用戶定義的許可證。
加載包含此類庫的仿真模型或對象時,Plant Simulation 會在 Windows 注冊表中查找相應的用戶定義許可證。如果未找到具有指定功能名稱的有效許可證,Plant Simulation 無法分別加載仿真模型或對象。
僅當版本高于或等于請求的版本、許可證的主機 ID 與計算機的主機 ID 匹配、未超過許可證的有效日期以及已注冊許可證的密碼與所請求許可證的密碼匹配時,注冊的許可證才有效。
可使用用戶定義許可證限制仿真模型和對象(包括庫)的傳遞。
要限制仿真模型的傳遞,調用 basis.setRequiredLicense,然后保存模型。
要限制庫的傳遞,針對庫文件夾調用 setRequiredLicense,然后保存庫。
更新需要用戶定義庫的庫時,新版本的庫還必須請求此用戶定義許可證(即,功能相同),請求的版本號必須至少與舊庫一樣大,并且許可證必須使用相同的密碼進行保護。
如果要為較新版本的庫指派其他密碼,調用方法 setRequiredLicense,然后將空字符串 “” 傳遞給參數 Feature,將舊密碼傳遞給參數 Password。這將取消注冊用戶定義的許可證。然后再次調用方法 setRequiredLicense,將許可證功能的名稱傳遞到參數 Feature,將新密碼傳遞到參數 Password,將舊密碼傳遞到參數 PreviousPasswordForUpdate。庫不僅可根據上述規則更新使用新密碼的庫版本,還可以更新使用舊密碼的任何庫版本,即使許可證功能的名稱更改或新版本號低于舊庫的版本號也是如此。
參數
數據類型為 string 的 Feature 參數用于指定許可證功能的名稱。傳遞空字符串 “” 時,將移除現有許可證,前提是輸入了正確的密碼。
數據類型為 string 的 Version 參數用于指定許可證的版本號。注:已注冊版本必須大于或等于請求的許可證。
例如,如果已注冊功能的版本 10,可以請求版本 9.5.0,反之不行。
數據類型為 string 的 Password 參數用于指定密碼。已注冊許可證的密碼必須與此密碼一致,才會將已注冊的許可證視為有效。
數據類型為 string 的可選參數 FreeInLicense 用于設置當 Plant Simulation 使用請求的許可證類型或值較低的許可證類型時,不請求用戶定義的許可證。可以輸入 “Application”、“Runtime”、“Simulation”、“” 或 “-”。
值的含義如下:
“-”:許可證永不免費,即使在查看器許可證中也如此。
“”:許可證僅在查看器許可證中免費。這是不輸入參數時的默認設置。
“Simulation”:許可證在仿真和較低的查看器許可證中免費。
“Runtime”::許可證在運行時許可證和較低的許可證類型(即仿真和查看器)中免費。
“Application”:許可證在應用許可證和較低的許可證類型(即運行時、仿真和查看器)中免費。
“Educational”:許可證在教育許可證和較低的許可證類型(即運行時、仿真和查看器)中免費。
數據類型為 string 的可選參數 Comment 用于設置將附加到消息的文本,如果在加載對象或模型時不存在許可證,該文本會在消息窗口中顯示。這僅在輸入任何文本時適用。
數據類型為 string 的可選參數 PreviousPasswordForUpdate 用于指定更新庫的先前密碼。
可以使用 SimTalk 函數 createLicenseFile 生成用戶定義許可證。
示例
.Standard.MyLibrary.setRequiredLicense(“MyFeature”, “9.5.7”, “MySecretPassword123”)
2、checkForLicense
checkForLicense【秘鑰有效性檢查】
案例演示:
--策略功能說明:
--本程序用于自定義程序進行秘鑰檢查,一般只需要初始化的時候調用一次即可
-------------------------------------------------------------------------------------Called By :--Calls :--Author:Yechaocheng--CreateDate : 2025/05/17 10:13:34.6020
-------------------------------------------------------------------------------------History:--2025/05/17 KM SimTalk 2.0
-----------------------------------------------------------------------------------
-->USER CODE BEGIN
-----------------------------------------------------------------------------------
param KeyName:string:="AHRF_KEYGEN",keyPwd:string:="18D77674-23E1-4329-B470-F58E8DC59B17"->boolean
var InPUTValue:string:=computeSHA1Hash(keyPwd)
var CheckValue:integer:=checkForLicense(KeyName, "1", InPUTValue)
if CheckValue=0return true//0:許可證功能已注冊且有效。
end
var Err:string
switch CheckValue
case 1Err:="許可證功能未注冊!"
case 2Err:="文件具有無效的注冊表數據格式!"
case 3Err:="SHA-1 哈希錯誤!"
case 4Err:="主機 ID 錯誤!"
case 5Err:="功能的注冊版本太舊!"
case 6Err:="許可證已過期!"
case 7Err:="此功能不允許與 Plant Simulation 許可證類型 (Professional / Standard / Runtime /...) 一同使用!"
elseErr:="未知錯誤!"
end
messageBox(to_str("|安琥銳鋒科技提醒您:|",Err),0,1)
return false
--closemodel //強制關閉當前模型
-----------------------------------------------------------------------------------
-->USER CODE End
-----------------------------------------------------------------------------------
完整功能代碼代碼如下:
--策略功能說明:-------------------------------------------------------------------------------------Called By :--Calls :--Author:Yechaocheng--CreateDate : 2025/05/17 10:13:34.6020
-------------------------------------------------------------------------------------History:--2025/05/17 KM SimTalk 2.0
-----------------------------------------------------------------------------------
-->USER CODE BEGIN
-----------------------------------------------------------------------------------
->boolean
//哈希轉換
var InPUTValue:string:=computeSHA1Hash("585E4D1C-9E64-415F-A83B-E4E0FBABBB6C")
//秘鑰驗證
var CheckValue:integer:=checkForLicense("MyFeature", "1", InPUTValue)
if CheckValue=0return true//0:許可證功能已注冊且有效。
end
var Err:string
switch CheckValue
case 1Err:="許可證功能未注冊!"
case 2Err:="文件具有無效的注冊表數據格式!"
case 3Err:="SHA-1 哈希錯誤!"
case 4Err:="主機 ID 錯誤!"
case 5Err:="功能的注冊版本太舊!"
case 6Err:="許可證已過期!"
case 7Err:="此功能不允許與 Plant Simulation 許可證類型 (Professional / Standard / Runtime /...) 一同使用!"
elseErr:="未知錯誤!"
end
messageBox(to_str("|安琥銳鋒科技提醒您:|",Err),0,1)
return false
--closemodel //強制關閉當前模型
-----------------------------------------------------------------------------------
-->USER CODE End
-----------------------------------------------------------------------------------
官方說明:
checkForLicense [SimTalk]
語法
checkForLicense(Feature:string, Version:string, PasswordHash:string) → integer
描述
checkForLicense 函數檢查用戶定義的許可證是否可用。
參數
數據類型為 string 的 Feature 參數用于指定許可證功能的名稱。
字符串數據類型的版本參數指定所請求許可證的版本號。
字符串數據類型的密碼哈希參數指定許可證密碼的 SHA-1 哈希。
返回值的數據類型
返回值的數據類型為整數。
各個值的含義如下:
0:許可證功能已注冊且有效。
1:許可證功能未注冊。
2:文件具有無效的注冊表數據格式。
3:SHA-1 哈希錯誤。
4:主機 ID 錯誤。
5:功能的注冊版本太舊。
6:許可證已過期。
7:此功能不允許與 Plant Simulation 許可證類型 (Professional / Standard / Runtime /…) 一同使用。
示例
if checkForLicense(“MyFeature”, “1”, “686483805ac47ca14e03514f7481a7973b401762”) = 0
// The license is available, you can proceed …
else
closeModel
messageBox(“The license ‘MyFeature’ is unavailable. The model was closed.\n”, 1, 1)
end