I created a fresh Python 2.7 environment with pywin and py2exe and stripped
down my overlay handler to the basics to better troubleshoot.

Running my script (command line or in PyCharm) registers everything
correctly, just like before, but running the py2exe generated EXE seems to
be registering but no overlays are appearing, which looks just like what
happens when I restarted explorer.exe in my previous attempt (logged
messages during registration, plus a manual check of the registry look good
but nothing generated by IsMemberOf.

I'm going to try generating a DLL and manually registering following the
example here:
http://stackoverflow.com/questions/4619701/python-64-bit-dll-com-server-registration-problem-on-64-bit-windows-7

It looks like this example came out of a mail thread with you back in 2011
so I'll try to follow the advice there and report back.

Thanks again for the help Mark.

On Wed, Jan 6, 2016 at 7:19 PM, Mark Hammond <mhamm...@skippinet.com.au>
wrote:

> On 7/01/2016 6:21 AM, Alexander Jewell wrote:
>
>> Unfortunately my end goal was to bundle the entire application as an exe
>> with PyInstaller so that the end user does not actually have Python
>> installed.
>>
>> Do you think it would be possible to package the overlay handler in such
>> a way that explorer would not need access to an installed Python
>> interpreter?
>> Embedding(https://docs.python.org/3.4/extending/embedding.html)  seems
>> to still require a Python interpreter but Cython sounds promising.
>>
>
> I've used py2exe for this in the past and it works fine - you need to end
> up with a stand-alone directory that functions independently of any
> installed Python - py2exe bundles Python itself, pywin32, etc in just this
> way. Last I tried though, it only worked with python 2.x
>
> Mark
>
>
>> -Alex
>>
>> On Wed, Jan 6, 2016 at 5:37 AM, Mark Hammond <skippy.hamm...@gmail.com
>> <mailto:skippy.hamm...@gmail.com>> wrote:
>>
>>     My guess is that the environment (eg, PATH, PYTHONPATH etc) for the
>>     new explorer instance isn't setup correctly - how is the
>>     explorer.exe process started when it *does* work? It's hard to
>>     answer without more info, but Python ends up inside explorer.exe, so
>>     the environment that explorer.exe starts with is important.
>>
>>     Mark
>>
>>     On 6/01/2016 8:29 AM, Alexander Jewell wrote:
>>
>>         So, thanks to the Tim Golden guide
>>         <
>> http://timgolden.me.uk/python/win32_how_do_i/add-my-own-icon-overlays.html
>> >
>>         (
>> http://timgolden.me.uk/python/win32_how_do_i/add-my-own-icon-overlays.html
>> )
>>         and
>>         other questions
>>         <
>> http://stackoverflow.com/questions/4775020/icon-overlay-issue-with-python#
>> >
>>         on
>>         Stack Overflow I have a script that will show overlays on files
>> and
>>         folders based on their "state" similar to Tortoise SVN or
>>         Dropbox. Works
>>         great.
>>
>>         My problem is that once I restart the explorer.exe process or the
>> OS
>>         itself and open explorer there are no longer any overlays.
>>
>>         My first thought:
>>
>>           * Have the service that actually manages file state detect that
>> no
>>             requests have come in and just re-register the overlay handler
>>
>>         The problem here is that registration requires elevated
>> permissions
>>         which is acceptable on initial install of the application by the
>> end
>>         user but not every time they restart their machine.
>>
>>         Can anyone suggest what I might be missing here? I have the class
>>         BaseOverlay and its children in a single .py file and register
>>         from my
>>         main app by calling this script using subprocess.
>>
>>
>> |subprocess.check_call("C:\scripts\register_overlays.py",shell=True)|
>>
>>         Is Explorer not able to re-load the script as it is Python? Do I
>>         need to
>>         compile into a DLL or EXE? Would that change the registration
>>         process?
>>
>>         Here's the registration call:
>>
>>         |win32com.server.register.UseCommandLine(BaseOverlay)|
>>
>>         Here's the class(simplified):
>>
>>         |classBaseOverlay:_reg_clsid_
>>         ='{8D4B1C5D-F8AC-4FDA-961F-A0143CD97C41}'_reg_progid_
>>         ='someoverlays'_reg_desc_ ='Icon Overlay Handler'_public_methods_
>>         =['GetOverlayInfo','GetPriority','IsMemberOf']_com_interfaces_
>>
>> =[shell.IID_IShellIconOverlayIdentifier]defGetOverlayInfo(self):returnicon_path,0,shellcon.ISIOI_ICONFILE
>>
>> defGetPriority(self):return50defIsMemberOf(self,fname,attributes):returnwinerror.S_OK|
>>
>>         Thanks for any help you can provide,
>>
>>         Alex Jewell
>>
>>
>>
>>
>>         _______________________________________________
>>         python-win32 mailing list
>>         python-win32@python.org <mailto:python-win32@python.org>
>>         https://mail.python.org/mailman/listinfo/python-win32
>>
>>
>>
>
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to