[python-win32] Have icon overlays persist after machine restart in Python
Mark Hammond
mhammond at skippinet.com.au
Wed Jan 6 19:19:52 EST 2016
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.hammond at gmail.com
> <mailto:skippy.hammond at 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 at python.org <mailto:python-win32 at python.org>
> https://mail.python.org/mailman/listinfo/python-win32
>
>
More information about the python-win32
mailing list