Re: Python Windows Scripting Engine

Mark Hammond <[email protected]> Thu, 1 Aug 2024 17:21:10 -0400
Newsgroups gmane.comp.python.windows
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--===============0189324571905877483==
Content-Type: multipart/alternative;
 boundary="------------TTQo3TbCLSiLD0YO4Mzbz5Vr"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------TTQo3TbCLSiLD0YO4Mzbz5Vr
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit


On 2024-08-01 4:37 p.m., Valentin Abrutski wrote:
> Hello Mark.
>
> Sorry for bothering you again. I got another issue. When I call 
> IActiveScript method: SetScriptSite(IActiveScriptSite site)
> I got invalid cast exception. Mostprobably it means that 
> IActiveScriptSite  can't be properly passed as argument to 
> SetScriptSite.   My assumption that  my definition of 
> IActiveScriptSite  is different from one is used in py2in32 library.
> I could find usages of   IActiveScriptSite   interface in the source 
> code of the library. But I can't find definition of this interface.

I'm not sure what you are asking. IActiveScriptSite is documented at 
https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescriptsite?view=visualstudiosdk-2019 
and IActiveScript at 
https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescript?view=visualstudiosdk-2019. 
The c++ "receiver" of this call for pywin32 is at 
https://github.com/mhammond/pywin32/blob/main/com/win32comext/axscript/src/PyGActiveScript.cpp#L5

Mark


> Can you advise me where I can find it?
>
> On Thu, Aug 1, 2024 at 4:19 PM Valentin Abrutski <[email protected]> wrote:
>
>     Hi Mark, just to let you know. I found the root cause. I was
>     trying to get 32bit version of interface and pywin32 export 64bit
>     version(different GUID and slightly different function signature)
>
>     Thank you for your help.
>
>     On Wed, Jul 31, 2024 at 5:08 PM Valentin Abrutski <[email protected]>
>     wrote:
>
>         Thank you Mark. I will try that. Appreciate
>
>         ср, 31 июл. 2024 г., 17:01 Mark Hammond
>         <[email protected]>:
>
>             Sorry, I can't explain that - running pyscript.py should
>             register things and support for IActiveScriptParse is
>             unconditional. You could try running `pyscript.py --debug`
>             which might print some debug stuff, or even add print
>             statements to client.py's QueryInterface function to make
>             sure it's actually being called. Also, executing
>             win32comext/axscript/test/testHost.py should try and
>             exercise the engine.
>
>             HTH,
>
>             Mark
>
>             On 2024-07-31 9:14 a.m., Valentin Abrutski wrote:
>>             Hi Mark. Thank you for the idea. And appreciate your help.
>>
>>             I tried it. And to be sure that I'm doing it right. I've
>>             tried to use this approach to get not only
>>             IActiveScriptParse, but also IActiveScript
>>             Still the same issue. I can get IActiveScript. But when
>>             try to get IActiveScriptParse I get error code:
>>             |0x80004002| (|E_NOINTERFACE|)
>>
>>             I've double checked GUID of IActiveScriptParse which is
>>             used in QuearyInterface and it looks
>>             correct:  BB1A2AE2-A4F9-11cf-8F20-00805F2CD064
>>
>>             I'm thinking about is it possible that the way I
>>             registered Python Script Engine is not correct? Is it
>>             possible that there are different way to do that?
>>             Just to remind you, I just run python pyscript.py
>>
>>
>>             On Wed, Jul 31, 2024 at 12:58 AM Mark Hammond
>>             <[email protected]> wrote:
>>
>>
>>                 On 2024-07-30 4:29 p.m., Valentin Abrutski wrote:
>>>                 Hi Mark.
>>>
>>>                 I double checked what I did with my previous
>>>                 attempt. And still can't get success. Probably you
>>>                 can give me an idea of what I'm doing wrong.
>>>
>>>                 I am working on an application(.Net) which provides
>>>                 scripting capabilities via AcriveScript Engine. With
>>>                 the ability to debug script step by step and etc.
>>>                 And we provide a standard set of languages VBScript
>>>                 and JScript. And now we want to provide Python support.
>>>
>>>                 Obviously I need to add a new ActiveScript Engine
>>>                 for Python. to system
>>>
>>>                 What I did. I installed python and installed the
>>>                 pywin32 package.
>>>                 Then I found this script
>>>                 Python311\Lib\site-packages\win32comext\axscript\client\pyscript.py
>>>                 and run it :
>>>                 python pyscript.py
>>>                 Requesting elevation and retrying...
>>>                 Registered: Python
>>>
>>>                 After that, I go to my application code and do the
>>>                 same we already do for Standard JScript or VBScript
>>>                 engines.
>>>                 For example, import of COM JScript class  is defined
>>>                 [ComImport,
>>>                 Guid("F414C260-6AC0-11CF-B6D1-00AA00BBBB58")]
>>>                     public class JScript
>>>                     {
>>>                     }
>>>
>>>                 So I defined import class for Python using GUID from
>>>                 python class implementation
>>>                 [ComImport,
>>>                 Guid("DF630910-1C1D-11d0-AE36-8C0F5E000000")]
>>>                     public class PythonScript
>>>                     {
>>>                     }
>>>
>>>                 Then my expectation is that I can cast it to
>>>                 IAcriveScript and IActiveScripParse (like I do with
>>>                 standard languages)
>>>                     _engine = new PythonScript();
>>>                     _iap = _engine as IActiveScriptParse;
>>>                     _ias = _engine as IActiveScript;
>>>
>>>                 But IActiveScriptParse still is null, IActiveScript
>>>                 - is good.
>>>                 I suppose that probably I did initialization in
>>>                 wrong way? or something like that?
>>
>>                 My best guess is that the "as" isn't working due to a
>>                 lack of a typelib for the engine - but a
>>                 QueryInterface(IID_IActiveScriptParse) on the
>>                 IActiveScript interface should work.
>>
>>                 HTH,
>>
>>                 Mark
>>
>>
>>>
>>>
>>>
>>>                 On Tue, Jul 30, 2024 at 10:54 PM Valentin Abrutski
>>>                 <[email protected]> wrote:
>>>
>>>                     Hi Mark
>>>
>>>                     Appreciate for fast response. I will look into
>>>                     it. Thank you.
>>>
>>>
>>>                     On Tue, Jul 30, 2024 at 5:56 PM Mark Hammond
>>>                     <[email protected]> wrote:
>>>
>>>                         IActiveScriptParse is supported - check out
>>>                         the com/win32comext/axscript directory.
>>>
>>>                         Cheers,
>>>
>>>                         Mark
>>>
>>>                         On 2024-07-30 10:14 a.m., Valentin Abrutski
>>>                         wrote:
>>>>                         Hello all,
>>>>
>>>>                         Hopefully somebody can help me.
>>>>
>>>>                         Microsoft provides implementations for
>>>>                         Microsoft Scripting Engine - VbScript and
>>>>                         JScript.
>>>>                         I need to add Python Script Engine support.
>>>>                         I see that pywin32 already has a component
>>>>                         for that(COM object). But it exposes only
>>>>                         the IActiveScript interface. For my needs I
>>>>                         also need IActiveScriptParse interface.
>>>>
>>>>                         please advise me if pywin32 implements it
>>>>                         also and I just missed something? or if you
>>>>                         have an idea what to do to get.. I will
>>>>                         appreciate for your help.
>>>>
>>>>                         _______________________________________________
>>>>                         python-win32 mailing list
>>>>                         [email protected]
>>>>                         https://mail.python.org/mailman/listinfo/python-win32
>>>
>>
>>             _______________________________________________
>>             python-win32 mailing list
>>             [email protected]
>>             https://mail.python.org/mailman/listinfo/python-win32
>
--------------TTQo3TbCLSiLD0YO4Mzbz5Vr
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 2024-08-01 4:37 p.m., Valentin
      Abrutski wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CADtR_MNDx_QgdmOCSFh_h9DAQKEJAOy+9TtiyL0WkTb5ZrcjqQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Hello Mark.<br>
        <br>
        Sorry for bothering you again. I got another issue. When I call
        IActiveScript method: SetScriptSite(IActiveScriptSite site)<br>
        I got invalid cast exception. Mostprobably it means that 
        IActiveScriptSite  can't be properly passed as argument to 
        SetScriptSite.   My assumption that  my definition of
        IActiveScriptSite  is different from one is used in py2in32
        library.
        <div>I could find usages of   IActiveScriptSite   interface in
          the source code of the library. But I can't find definition of
          this interface. <br>
        </div>
      </div>
    </blockquote>
    <p>I'm not sure what you are asking. IActiveScriptSite is documented
      at
<a class="moz-txt-link-freetext" href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescriptsite?view=visualstudiosdk-2019">https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescriptsite?view=visualstudiosdk-2019</a>
      and IActiveScript at
<a class="moz-txt-link-freetext" href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescript?view=visualstudiosdk-2019">https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.interop.iactivescript?view=visualstudiosdk-2019</a>.
      The c++ "receiver" of this call for pywin32 is at
<a class="moz-txt-link-freetext" href="https://github.com/mhammond/pywin32/blob/main/com/win32comext/axscript/src/PyGActiveScript.cpp#L5">https://github.com/mhammond/pywin32/blob/main/com/win32comext/axscript/src/PyGActiveScript.cpp#L5</a><br>
    </p>
    <p>Mark<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CADtR_MNDx_QgdmOCSFh_h9DAQKEJAOy+9TtiyL0WkTb5ZrcjqQ@mail.gmail.com">
      <div dir="ltr">
        <div>Can you advise me where I can find it? <br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Thu, Aug 1, 2024 at 4:19 PM
          Valentin Abrutski &lt;<a href="mailto:[email protected]"
            moz-do-not-send="true" class="moz-txt-link-freetext">[email protected]</a>&gt;
          wrote:<br>
        </div>
        <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="ltr">Hi Mark, just to let you know. I found the root
            cause. I was trying to get 32bit version of interface and
            pywin32 export 64bit version(different GUID and slightly
            different function signature)
            <div><br>
            </div>
            <div>Thank you for your help. </div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Wed, Jul 31, 2024 at
              5:08 PM Valentin Abrutski &lt;<a
                href="mailto:[email protected]" target="_blank"
                moz-do-not-send="true" class="moz-txt-link-freetext">[email protected]</a>&gt;
              wrote:<br>
            </div>
            <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              <div dir="auto">Thank you Mark. I will try that.
                Appreciate </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">ср, 31 июл. 2024 г.,
                  17:01 Mark Hammond &lt;<a
                    href="mailto:[email protected]"
                    target="_blank" moz-do-not-send="true"
                    class="moz-txt-link-freetext">[email protected]</a>&gt;:<br>
                </div>
                <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                  <div>
                    <p>Sorry, I can't explain that - running pyscript.py
                      should register things and support for
                      IActiveScriptParse is unconditional. You could try
                      running `pyscript.py --debug` which might print
                      some debug stuff, or even add print statements to
                      client.py's QueryInterface function to make sure
                      it's actually being called. Also, executing
                      win32comext/axscript/test/testHost.py should try
                      and exercise the engine.</p>
                    <p>HTH,</p>
                    <p>Mark<br>
                    </p>
                    <div>On 2024-07-31 9:14 a.m., Valentin Abrutski
                      wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <div dir="ltr">Hi Mark. Thank you for the idea. 
                        And appreciate your help.
                        <div><br>
                          I tried it. And to be sure that I'm doing it
                          right. I've tried to use this approach to get
                          not only IActiveScriptParse, but also
                          IActiveScript
                          <div>Still the same issue. I can get
                            IActiveScript. But when try to get
                            IActiveScriptParse I get error code: <code
style="border-radius:4px;font-size:12px;padding:1px 3px">0x80004002</code><span
style="font-size:13px;color:rgb(204,204,204);font-family:&quot;Segoe WPC&quot;,&quot;Segoe UI&quot;,sans-serif;background-color:rgb(24,24,24)"> (</span><code
style="border-radius:4px;font-size:12px;padding:1px 3px">E_NOINTERFACE</code><span
style="font-size:13px;color:rgb(204,204,204);font-family:&quot;Segoe WPC&quot;,&quot;Segoe UI&quot;,sans-serif;background-color:rgb(24,24,24)">)</span></div>
                          <div><span
style="font-size:13px;color:rgb(204,204,204);font-family:&quot;Segoe WPC&quot;,&quot;Segoe UI&quot;,sans-serif;background-color:rgb(24,24,24)"><br>
                            </span></div>
                          <div>I've double checked GUID of
                            IActiveScriptParse which is used in
                            QuearyInterface and it looks
                            correct:  BB1A2AE2-A4F9-11cf-8F20-00805F2CD064</div>
                          <div><br>
                          </div>
                          <div>I'm thinking about is it possible that
                            the way I registered Python Script Engine is
                            not correct? Is it possible that there are
                            different way to do that? </div>
                          <div>Just to remind you, I just run <span
                              style="font-family:monospace">python
                              pyscript.py </span></div>
                          <div><br>
                          </div>
                        </div>
                      </div>
                      <br>
                      <div class="gmail_quote">
                        <div dir="ltr" class="gmail_attr">On Wed, Jul
                          31, 2024 at 12:58 AM Mark Hammond &lt;<a
                            href="mailto:[email protected]"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true"
                            class="moz-txt-link-freetext">[email protected]</a>&gt;
                          wrote:<br>
                        </div>
                        <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div>
                            <p><br>
                            </p>
                            <div>On 2024-07-30 4:29 p.m., Valentin
                              Abrutski wrote:<br>
                            </div>
                            <blockquote type="cite">
                              <div dir="ltr">Hi Mark. <br>
                                <br>
                                I double checked what I did with my
                                previous attempt. And still can't get
                                success. Probably you can give me an
                                idea of what I'm doing wrong.
                                <div><br>
                                </div>
                                <div>I am working on an
                                  application(.Net) which provides
                                  scripting capabilities via
                                  AcriveScript Engine. With the ability
                                  to debug script step by step and etc.
                                  And we provide a standard set of
                                  languages VBScript and JScript. And
                                  now we want to provide Python support.</div>
                                <div><br>
                                </div>
                                <div>Obviously I need to add a new
                                  ActiveScript Engine for Python. to
                                  system</div>
                                <div><br>
                                </div>
                                <div>What I did. I installed python and
                                  installed the pywin32 package.</div>
                                <div>Then I found this script
                                  Python311\Lib\site-packages\win32comext\axscript\client\pyscript.py
                                  and run it : <br>
                                  <font face="monospace">python
                                    pyscript.py                        
                                                                       
                                                                       
                                                              </font></div>
                                <div><font face="monospace">Requesting
                                    elevation and retrying...</font></div>
                                <div><font face="monospace">Registered:
                                    Python</font></div>
                                <div><font face="monospace"><br>
                                  </font></div>
                                <div><font face="arial, sans-serif">After
                                    that, I go to my application code
                                    and do the same we already do for
                                    Standard JScript or VBScript
                                    engines.</font></div>
                                <div><font face="arial, sans-serif">For
                                    example, import of COM JScript
                                    class  is defined</font></div>
                                <div><font face="monospace">   
                                    [ComImport,
                                    Guid("F414C260-6AC0-11CF-B6D1-00AA00BBBB58")]<br>
                                        public class JScript<br>
                                        {<br>
                                        }</font></div>
                                <div><font face="monospace"><br>
                                  </font></div>
                                <div><font face="arial, sans-serif">So I
                                    defined import class for Python
                                    using GUID from python class
                                    implementation</font></div>
                                <div><font face="monospace">   
                                    [ComImport,
                                    Guid("DF630910-1C1D-11d0-AE36-8C0F5E000000")]<br>
                                        public class PythonScript<br>
                                        {<br>
                                        }<br>
                                  </font></div>
                                <div><font face="monospace"><br>
                                  </font></div>
                                <div><font face="arial, sans-serif">Then
                                    my expectation is that I can cast it
                                    to IAcriveScript and
                                    IActiveScripParse (like I do with
                                    standard languages)</font></div>
                                <div><font face="monospace">    _engine
                                    = new PythonScript();<br>
                                        _iap = _engine as
                                    IActiveScriptParse;<br>
                                        _ias = _engine as IActiveScript;<br>
                                  </font></div>
                                <div><font face="monospace"><br>
                                  </font></div>
                                <div><font face="arial, sans-serif">But IActiveScriptParse
                                    still is null, IActiveScript - is
                                    good.</font></div>
                                <div><font face="arial, sans-serif">I
                                    suppose that probably I did
                                    initialization in wrong way? or
                                    something like that?</font></div>
                              </div>
                            </blockquote>
                            <p>My best guess is that the "as" isn't
                              working due to a lack of a typelib for the
                              engine - but a
                              QueryInterface(IID_IActiveScriptParse) on
                              the IActiveScript interface should work.</p>
                            <p>HTH,</p>
                            <p>Mark<br>
                            </p>
                            <p><br>
                            </p>
                            <blockquote type="cite">
                              <div dir="ltr">
                                <div><br>
                                </div>
                                <div>                       <br>
                                </div>
                              </div>
                              <br>
                              <div class="gmail_quote">
                                <div dir="ltr" class="gmail_attr">On
                                  Tue, Jul 30, 2024 at 10:54 PM Valentin
                                  Abrutski &lt;<a
                                    href="mailto:[email protected]"
                                    rel="noreferrer" target="_blank"
                                    moz-do-not-send="true"
                                    class="moz-txt-link-freetext">[email protected]</a>&gt;
                                  wrote:<br>
                                </div>
                                <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div dir="ltr">Hi Mark
                                    <div><br>
                                    </div>
                                    <div>Appreciate for fast response. I
                                      will look into it. Thank you. </div>
                                    <div><br>
                                    </div>
                                  </div>
                                  <br>
                                  <div class="gmail_quote">
                                    <div dir="ltr" class="gmail_attr">On
                                      Tue, Jul 30, 2024 at 5:56 PM Mark
                                      Hammond &lt;<a
href="mailto:[email protected]" rel="noreferrer" target="_blank"
                                        moz-do-not-send="true"
                                        class="moz-txt-link-freetext">[email protected]</a>&gt;
                                      wrote:<br>
                                    </div>
                                    <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                      <div>
                                        <p>IActiveScriptParse is
                                          supported - check out the
                                          com/win32comext/axscript
                                          directory.</p>
                                        <p>Cheers,<br>
                                        </p>
                                        <p>Mark<br>
                                        </p>
                                        <div>On 2024-07-30 10:14 a.m.,
                                          Valentin Abrutski wrote:<br>
                                        </div>
                                        <blockquote type="cite">
                                          <div dir="ltr">Hello all, 
                                            <div><br>
                                            </div>
                                            <div>Hopefully somebody can
                                              help me.</div>
                                            <div><br>
                                            </div>
                                            <div>Microsoft provides
                                              implementations for
                                              Microsoft Scripting Engine
                                              - VbScript and JScript.</div>
                                            <div>I need to add Python
                                              Script Engine support. I
                                              see that pywin32 already
                                              has a component for
                                              that(COM object). But it
                                              exposes only the
                                              IActiveScript interface.
                                              For my needs I also need 
                                              IActiveScriptParse
                                              interface. <br>
                                              <br>
                                              please advise me if
                                              pywin32 implements it also
                                              and I just missed
                                              something? or if you have
                                              an idea what to do to
                                              get.. I will appreciate
                                              for your help.</div>
                                          </div>
                                          <br>
                                          <fieldset></fieldset>
                                          <pre>_______________________________________________
python-win32 mailing list
<a href="mailto:[email protected]" rel="noreferrer"
                                          target="_blank"
                                          moz-do-not-send="true"
                                          class="moz-txt-link-freetext">[email protected]</a>
<a href="https://mail.python.org/mailman/listinfo/python-win32"
                                          rel="noreferrer"
                                          target="_blank"
                                          moz-do-not-send="true"
                                          class="moz-txt-link-freetext">https://mail.python.org/mailman/listinfo/python-win32</a>
</pre>
                                        </blockquote>
                                      </div>
                                    </blockquote>
                                  </div>
                                </blockquote>
                              </div>
                            </blockquote>
                          </div>
                        </blockquote>
                      </div>
                      <br>
                      <fieldset></fieldset>
                      <pre>_______________________________________________
python-win32 mailing list
<a href="mailto:[email protected]" rel="noreferrer"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">[email protected]</a>
<a href="https://mail.python.org/mailman/listinfo/python-win32"
                      rel="noreferrer" target="_blank"
                      moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://mail.python.org/mailman/listinfo/python-win32</a>
</pre>
                    </blockquote>
                  </div>
                </blockquote>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
    </blockquote>
  </body>
</html>

--------------TTQo3TbCLSiLD0YO4Mzbz5Vr--

--===============0189324571905877483==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
python-win32 mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-win32

--===============0189324571905877483==--