Re: Python Windows Scripting Engine
Valentin Abrutski <[email protected]> Thu, 1 Aug 2024 16:19:35 +0300
| Newsgroups | gmane.comp.python.windows |
|---|---|
| Message-ID | <CADtR_MN3YdV7j7tysO7vqdAgzo5jTGpnJqR=MdTqb-z8Owqm1g@mail.gmail.com> |
--===============3821725599608523588== Content-Type: multipart/alternative; boundary="000000000000d147e6061e9f1129" --000000000000d147e6061e9f1129 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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=E2=80=AFPM Valentin Abrutski <[email protected]> = wrote: > Thank you Mark. I will try that. Appreciate > > =D1=81=D1=80, 31 =D0=B8=D1=8E=D0=BB. 2024=E2=80=AF=D0=B3., 17:01 Mark Ham= mond <[email protected]>: > >> Sorry, I can't explain that - running pyscript.py should register things >> and support for IActiveScriptParse is unconditional. You could try runni= ng >> `pyscript.py --debug` which might print some debug stuff, or even add pr= int >> 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-00805F2CD= 064 >> >> I'm thinking about is it possible that the way I registered Python Scrip= t >> 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=E2=80=AFAM Mark Hammond <mhammond@skippine= t.com.au> >> 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 an= d >>> 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 =3D new PythonScript(); >>> _iap =3D _engine as IActiveScriptParse; >>> _ias =3D _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=E2=80=AFPM Valentin Abrutski <va@zaptest.= com> >>> wrote: >>> >>>> Hi Mark >>>> >>>> Appreciate for fast response. I will look into it. Thank you. >>>> >>>> >>>> On Tue, Jul 30, 2024 at 5:56=E2=80=AFPM Mark Hammond <mhammond@skippin= et.com.au> >>>> 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 alread= y >>>>> has a component for that(COM object). But it exposes only the IActive= Script >>>>> 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 apprecia= te for >>>>> your help. >>>>> >>>>> _______________________________________________ >>>>> python-win32 mailing [email protected]://mail.python.o= rg/mailman/listinfo/python-win32 >>>>> >>>>> >> _______________________________________________ >> python-win32 mailing [email protected]://mail.python.org/= mailman/listinfo/python-win32 >> >> --000000000000d147e6061e9f1129 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi Mark, just to let you know. I found the root cause. I w= as trying to get 32bit version of interface and pywin32 export 64bit versio= n(different GUID and slightly different function signature)<div><br></div><= div>Thank you for your help.=C2=A0</div></div><br><div class=3D"gmail_quote= "><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Jul 31, 2024 at 5:08=E2=80= =AFPM Valentin Abrutski <<a href=3D"mailto:[email protected]">[email protected]= m</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin= :0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"= ><div dir=3D"auto">Thank you Mark. I will try that. Appreciate=C2=A0</div><= br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">=D1=81= =D1=80, 31 =D0=B8=D1=8E=D0=BB. 2024=E2=80=AF=D0=B3., 17:01 Mark Hammond <= ;<a href=3D"mailto:[email protected]" target=3D"_blank">mhammond@sk= ippinet.com.au</a>>:<br></div><blockquote class=3D"gmail_quote" style=3D= "margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-le= ft:1ex"><u></u> =20 =20 =20 <div> <p>Sorry, I can't explain that - running pyscript.py should registe= r 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=3D"cite"> =20 <div dir=3D"ltr">Hi Mark. Thank you for the idea.=C2=A0 And appreciate=C2=A0your 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=C2=A0code:=C2=A0<code= style=3D"border-radius:4px;font-size:12px;padding:1px 3px">0x80004002</cod= e><span style=3D"font-size:13px;color:rgb(204,204,204);font-family:"Se= goe WPC","Segoe UI",sans-serif;background-color:rgb(24,24,24= )">=C2=A0(</span><code style=3D"border-radius:4px;font-size:12px;padding:1p= x 3px">E_NOINTERFACE</code><span style=3D"font-size:13px;color:rgb(204,204,= 204);font-family:"Segoe WPC","Segoe UI",sans-serif;back= ground-color:rgb(24,24,24)">)</span></div> <div><span style=3D"font-size:13px;color:rgb(204,204,204);font-fa= mily:"Segoe WPC","Segoe UI",sans-serif;background-color= :rgb(24,24,24)"><br> </span></div> <div>I've double checked GUID of IActiveScriptParse which is used in QuearyInterface=C2=A0and it looks correct:=C2=A0=C2=A0BB1A2AE2-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=C2=A0that there are different way to do that?=C2=A0</d= iv> <div>Just to remind you, I just run=C2=A0<span style=3D"font-fami= ly:monospace">python pyscript.py=C2=A0</span></div> <div><br> </div> </div> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Wed, Jul 31, 2024 at 12:58=E2=80=AFAM Mark Hammond <<a href=3D"mailto:mhammond@skip= pinet.com.au" rel=3D"noreferrer" target=3D"_blank">[email protected]= u</a>> wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"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=3D"cite"> <div dir=3D"ltr">Hi Mark.=C2=A0<br> <br> I double checked what I did with my previous attempt. And still can't get success. Probably=C2=A0you 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=C2=A0and installed the pywin32 package.</div> <div>Then I found this script Python311\Lib\site-packages\win32comext\axscript\client\p= yscript.py and run it : <br> <font face=3D"monospace">python pyscript.py =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</font></div> <div><font face=3D"monospace">Requesting elevation and retrying...</font></div> <div><font face=3D"monospace">Registered: Python</font></di= v> <div><font face=3D"monospace"><br> </font></div> <div><font face=3D"arial, sans-serif">After that,=C2=A0I go= to my application code and do the same we already do for Standard JScript or VBScript engines.</font></div> <div><font face=3D"arial, sans-serif">For example, import of COM JScript class=C2=A0 is defined</font></div> <div><font face=3D"monospace">=C2=A0 =C2=A0 [ComImport, Guid("F414C260-6AC0-11CF-B6D1-00AA00BBBB58")]= <br> =C2=A0 =C2=A0 public class JScript<br> =C2=A0 =C2=A0 {<br> =C2=A0 =C2=A0 }</font></div> <div><font face=3D"monospace"><br> </font></div> <div><font face=3D"arial, sans-serif">So I defined import class for Python using GUID from python class implementation</font></div> <div><font face=3D"monospace">=C2=A0 =C2=A0 [ComImport, Guid("DF630910-1C1D-11d0-AE36-8C0F5E000000")]= <br> =C2=A0 =C2=A0 public class PythonScript<br> =C2=A0 =C2=A0 {<br> =C2=A0 =C2=A0 }<br> </font></div> <div><font face=3D"monospace"><br> </font></div> <div><font face=3D"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=3D"monospace">=C2=A0 =C2=A0 _engine =3D new PythonScript();<br> =C2=A0 =C2=A0 _iap =3D _engine as IActiveScriptParse;<b= r> =C2=A0 =C2=A0 _ias =3D _engine as IActiveScript;<br> </font></div> <div><font face=3D"monospace"><br> </font></div> <div><font face=3D"arial, sans-serif">But=C2=A0IActiveScrip= tParse still is null,=C2=A0IActiveScript - is good.</font></di= v> <div><font face=3D"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 d= ue 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=3D"cite"> <div dir=3D"ltr"> <div><br> </div> <div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<br> </div> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jul 30, 2024 at 10:54=E2=80=AFPM Valentin Abrutski <<a href=3D"mail= to:[email protected]" rel=3D"noreferrer" target=3D"_blank">[email protected]</a>&= gt; wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0= px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div dir=3D"ltr">Hi Mark <div><br> </div> <div>Appreciate for fast response. I will look into it. Thank you.=C2=A0</div> <div><br> </div> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jul 30, 2024 at 5:56=E2=80=AFPM Mark Hammond <<a href=3D"m= ailto:[email protected]" rel=3D"noreferrer" target=3D"_blank">mhamm= [email protected]</a>> wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"margin:0px 0= px 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=3D"cite"> <div dir=3D"ltr">Hello all,=C2=A0 <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=C2=A0 IActiveScriptParse interface.=C2=A0<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=3D"mailto:[email protected]" rel=3D"noreferrer" target=3D"_bl= ank">[email protected]</a> <a href=3D"https://mail.python.org/mailman/listinfo/python-win32" rel=3D"no= referrer" target=3D"_blank">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=3D"mailto:[email protected]" rel=3D"noreferrer" target=3D"_bl= ank">[email protected]</a> <a href=3D"https://mail.python.org/mailman/listinfo/python-win32" rel=3D"no= referrer" target=3D"_blank">https://mail.python.org/mailman/listinfo/python= -win32</a> </pre> </blockquote> </div> </blockquote></div> </blockquote></div> --000000000000d147e6061e9f1129-- --===============3821725599608523588== 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 --===============3821725599608523588==--