javascript - आईई 9 के जावास्क्रिप्ट इंजन के लिए प्रोगिड या सीएलएसआईडी क्या है(कोड-नाम "चक्र")




.net wsh (2)

अब आप चक्र एपीआई के माध्यम से सीधे चक्र रनटाइम को कॉल कर सकते हैं और अब आपको IActiveScript का उपयोग करने की आवश्यकता नहीं है।

यहां एमएसडीएन पर एक लेख दिखाया गया है कि सी ++ या सी # में चक्र रनटाइम की मेजबानी कैसे करें:

http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880

.NET का उपयोग करके, मैं एक ऐप लिख सकता हूं जो एक स्क्रिप्टिंग इंजन होस्ट करता है जो माइक्रोसॉफ्ट के IActiveScript सम्मेलनों का अनुपालन करता है। इसमें माइक्रोसॉफ्ट से जेस्क्रिप्ट और वीबीस्क्रिप्ट, और पर्लस्क्रिप्ट, रुबीस्क्रिप्ट भी शामिल है और मुझे नहीं पता कि तृतीय पक्षों से और क्या है

कोड में ऐसा करने का तरीका कुछ ऐसा है:

    Type engine = Type.GetTypeFromProgID(progId, true);
    _engine = Activator.CreateInstance(engine) as IActiveScript;

जहां progId मूल्य जावास्क्रिप्ट, जेस्क्रिप्ट, progId , progId , और अन्य ले सकता है। //E विकल्प के साथ कमांड लाइन पर progId निर्दिष्ट करते हुए, आप cscript.exe चलाते समय कुछ ऐसा ही कर सकते हैं। उदाहरण के लिए, यह आदेश:

cscript.exe  <file>  //e:JScript

.. जेस्क्रिप्ट इंजन के माध्यम से, इसके विस्तार के बावजूद, निर्दिष्ट फ़ाइल चलाएगा।

मेरी मशीन पर, यदि मैं HKLM\SW\Classes\ में देखता हूं, तो तीन प्रोजेक्ट्स {जावास्क्रिप्ट, जेस्क्रिप्ट, ईसीएमएस्क्रिप्ट} सभी एक ही सीएलएसआईडी को इंगित करते हैं, जो मुझे लगता है कि जेस्क्रिप्ट 5.8 स्क्रिप्ट इंजन है: {f414c260-6ac0-11cf-b6d1-00aa00bbbb58}

क्या कोई प्रोजेआईड या सीएलएसआईडी है जिसे मैं आईई 9 के जावास्क्रिप्ट इंजन, उर्फ ​​"चक्र" चलाने के लिए निर्दिष्ट कर सकता हूं?

क्या IE9 का इंजन अभी भी IActiveScript द्वारा लोड हो जाता है?
माइक्रोसॉफ्ट के दस्तावेज से पता चलता है कि यह करता है , लेकिन प्रोजेआईडी या सीएलएसआईडी निर्दिष्ट नहीं करता है।


आईई 9 के साथ स्थापित चक्र जावास्क्रिप्ट इंजन के लिए सीएलएसआईडी है
{16d51579-a30b-4c8b-a276-0ff4dc41e755}

InProcServer32 %windir%\System32\jscript9.dll

ऐसा कोई प्रोजेक्ट नहीं है जिसे मैं पा सकता हूं। यह थोड़ा अजीब है; आम तौर पर जोड़ा गया प्रोगिड और सीएलएसआईडी प्रविष्टियां एक-दूसरे को संदर्भित करती हैं। किसी दिए गए COM ऑब्जेक्ट के लिए, रजिस्ट्री में प्रोगिड कुंजी में सीएलएसआईडी नामक उपकुंजी होती है, और सीएलएसआईडी रजिस्ट्री कुंजी में प्रोगिड नामक एक उपकुंजी होती है, और वे एक दूसरे को संदर्भित करती हैं। लेकिन आईई 9 सीएलएसआईडी के लिए प्रोगिड उपकुंजी "जेस्क्रिप्ट" है, जो निश्चित रूप से v5.8 जेस्क्रिप्ट सीएलएसआईडी को संदर्भित करती है। यह सुनिश्चित नहीं है कि यह माइक्रोसॉफ्ट द्वारा गलत गलती है, या एक उद्देश्यपूर्ण उद्देश्य है, क्योंकि वे नहीं चाहते हैं कि कोई भी आईई 9 के बाहर चक्र इंजन का उपयोग कर रहा हो। मेरे लिए उद्देश्यपूर्ण लग रहा है।

मैंने jscript9.dll के लिए रजिस्ट्री को खोजकर सीएलएसआईडी के बारे में सीखा।

यदि आपके पास .NET कोड है जो स्क्रिप्टिंग इंजन होस्ट करता है, तो आप सीएलएसआईडी का उपयोग कर आईई 9 जावास्क्रिप्ट इंजन ("चक्र") के लिए IActiveScript ऑब्जेक्ट को तुरंत चालू कर सकते हैं। कोड इस तरह कुछ होना चाहिए:

private const string clsIdPattern =
    @"^(?<curly>\{)?[a-zA-Z0-9]{8}(?:-[a-zA-Z0-9]{4}){3}-[a-zA-Z0-9]{12}(?(curly)\})$";

public ScriptEngine(string language)
{
    if (language == null)
        throw new ArgumentNullException("language");

    Type engineType = null;

    if (Regex.IsMatch(language, clsIdPattern))
    {
        // it's a CLSID
        var guid = new System.Guid(language);
        engineType = Type.GetTypeFromCLSID(guid, true);
    }
    else
    {
        // assume vanilla progId
        engineType = Type.GetTypeFromProgID(language, true);
    }

    var engine = Activator.CreateInstance(engineType) as IActiveScript;

उपर्युक्त में, clsIdPattern एक नियमित अभिव्यक्ति है जो परिचित GUID प्रारूप से मेल खाती है, या तो आस-पास के कर्ली के साथ या उसके बिना।

उपर्युक्त कोड को देखते हुए, आप "जेएसक्रिप्ट", "जावास्क्रिप्ट" या "ईसीएमएस्क्रिप्ट" पास कर सकते हैं और v5.8 जेस्क्रिप्ट इंजन प्राप्त कर सकते हैं। या आप "{16d51579-a30b-4c8b-a276-0ff4dc41e755}" पास कर सकते हैं और आईई 9 जावास्क्रिप्ट इंजन प्राप्त कर सकते हैं। स्पष्ट रूप से आपको काम करने के लिए IE9 स्थापित करने की आवश्यकता है।

मैंने अभी कोशिश की और यह सरल मामलों के लिए काम करता है। मैं जल्द ही इसके साथ कुछ और खेलूँगा।

यदि आप डब्ल्यूएसएच से चक्र को चलाने के लिए चाहते हैं, जैसे cscript.exe से, तो मुझे लगता है कि आपको एक प्रोगिड की आवश्यकता होगी।
अगर मैं रजिस्ट्री में प्रोजेड के रूप में "चक्र" बना देता हूं, तो सही सीएलएसआईडी का जिक्र करते हुए, मैं आईई 9 के इंजन के माध्यम से जेएस फाइलों को चला सकता हूं:

cscript.exe  module.js  //E:Chakra 

उदाहरण के लिए, नया "चक्र" प्रोजेड डालने के बाद, इस तरह की एक स्क्रिप्ट दी गई:

WScript.Echo( ScriptEngineMajorVersion() + "." +
              ScriptEngineMinorVersion() + "." +
              ScriptEngineBuildVersion());

... आउटपुट इस तरह है:

C:\dev\js>Version.js
5.8.16982

C:\dev\js>cscript.exe Version.js  //E:Chakra
9.0.16434

और यहां जावास्क्रिप्ट में एईएस एन्क्रिप्शन के परीक्षण का नतीजा है, चक्र को जेस्क्रिप्ट 5.8 के साथ तुलना करना:

C:\dev\js\SlowAES>cscript.exe test.aes.js
AES encryption in Javascript.
password  : Albatros1
salt      : saltines (73616c74696e6573)
iterations: 1000
key       : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv        : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed   : 5011ms

C:\dev\js\SlowAES>cscript.exe test.aes.js //E:Chakra
AES encryption in Javascript.
password  : Albatros1
salt      : saltines (73616c74696e6573)
iterations: 1000
key       : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv        : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed   : 2593ms

मेरी रजिस्ट्री में प्रोगिड सेट करने के लिए, मैंने इसका इस्तेमाल किया:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]
@="JScript Language"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\OLEScript]

और चक्र का खुलासा करने के लिए, या रजिस्ट्री को वापस करने के लिए, मैंने यह किया:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"

[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]

यह रजिस्ट्री स्क्रिप्ट x64 विंडोज के साथ काम किया; यदि आपके पास x64 नहीं है, तो आपको WOW6432Node लाइनों को निकालना होगा।







iactivescript