4Dのビルド番号を取得するメソッド
日付 | 2009/08/21 |
---|---|
ID | 75812 (英語原文参照) |
バージョン | 11.4 |
プラットフォーム | Mac & Win |
この記事は、最新ではないバージョンに関連した方法について解説しています。
最新のバージョンでは推奨されていないか、または他の方法で簡単に実現できる可能性があります。
以下のコードは、4Dのビルド番号を返すものです。クロスプラットフォームに記述されており、MacとWindowsそれぞれ異なる方法でビルド番号を調べています。
Macでは、Info.plistファイルを解析しています。これはアプリケーションに関する情報が含まれているXMLファイルです。ファイルはXSLTで変換され、Match regexで結果が取り出されています。
Windowsでは、LAUNCH EXTERNAL PROCESSでVBScriptを実行し、4Dのアプリケーションバージョンを調べています。ここでもMatch regexで最終的に結果を取り出しています。
C_TEXT($0) C_LONGINT($platform_l) PLATFORM PROPERTIES($platform_l) If ($platform_l=Mac OS ) $xsl_source_t:="" $xsl_source_t:=$xsl_source_t+"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" $xsl_source_t:=$xsl_source_t+"<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n" $xsl_source_t:=$xsl_source_t+"<xsl:output method=\"text\" />\n" $xsl_source_t:=$xsl_source_t+"<xsl:template match=\"/\">\n" $xsl_source_t:=$xsl_source_t+""<xsl:for-each select=\"/plist/dict/key[ string() = 'CFBundleShortVersionString' ]\">\n" $xsl_source_t:=$xsl_source_t+"xsl:value-of select=\"./following-sibling::*\" />\n" $xsl_source_t:=$xsl_source_t+"</xsl:for-each>\n" $xsl_source_t:=$xsl_source_t+"</xsl:stylesheet>\n" $xsl_source_t:=$xsl_source_t+"</xsl:template>\n" C_BLOB($xml_result_x;$xsl_source_x) CONVERT FROM TEXT($xsl_source_t;"utf-8";$xsl_source_x) DOCUMENT TO BLOB(Application file+":Contents:Info.plist";$xml_source_x) APPLY XSLT TRANSFORMATION($xml_source_x;$xsl_source_x;$xml_result_x) $xml_result_t:=Convert to text($xml_result_x;"utf-8") ARRAY LONGINT($match_pos_al;0) ARRAY LONGINT($match_length_al;0) If (Match regex("(.*)\\((.*)\\)";$xml_result_t;1;$match_pos_al;$match_length_al)) $0:=Substring($xml_result_t;$match_pos_al{2};$match_length_al{2}) End if Else $vbs_in_t:="" $vbs_in_t:=$vbs_in_t+"Set fso = CreateObject(\"Scripting.FileSystemObject\")\r\n" $vbs_in_t:=$vbs_in_t+"WScript.StdOut.Write fso.GetFileVersion(\"" $vbs_in_t:=$vbs_in_t+Application file+"\")\r\n" $script_path_t:=Temporary folder+"$"+String(Milliseconds)+".vbs" CONVERT FROM TEXT($vbs_in_t;"UTF-16LE";$script_x) BLOB TO DOCUMENT($script_path_t;$script_x) SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true") C_BLOB($stdin_x;$stdout_x;$stderr_x) $cscript_t:="cscript //Nologo //U \""+$script_path_t+"\"" LAUNCH EXTERNAL PROCESS($cscript_t;$stdin_x;$stdout_x;$stderr_x) $vbs_out_t:=Convert to text($stdout_x;"UTF-16LE") ARRAY LONGINT($match_pos_al;0) ARRAY LONGINT($match_length_al;0) If (Match regex("(.*)\\.(.*)";$vbs_out_t;1;$match_pos_al;$match_length_al)) $0:=Substring($vbs_out_t;$match_pos_al{2};$match_length_al{2}) End if DELETE DOCUMENT($script_path_t) End if