在Python中使图标覆盖在机器重新启动后保持不变

在Python中使图标覆盖在机器重新启动后保持不变,python,windows,com,overlay,Python,Windows,Com,Overlay,所以,多亏了Tim Golden和其他人,我有了一个脚本,可以根据文件和文件夹的“状态”显示覆盖图,类似于Tortoise SVN或Dropbox 我的问题是,一旦我重新启动explorer.exe进程或操作系统本身并打开explorer,就不再有任何覆盖 我的第一个想法是: 让实际管理文件状态的服务检测到没有请求进入,只需重新注册覆盖处理程序 这里的问题是注册需要提升权限,这在最终用户初次安装应用程序时是可以接受的,但不是每次重新启动计算机时都可以接受 有人能告诉我这里可能遗漏了什么吗?

所以,多亏了Tim Golden和其他人,我有了一个脚本,可以根据文件和文件夹的“状态”显示覆盖图,类似于Tortoise SVN或Dropbox

我的问题是,一旦我重新启动explorer.exe进程或操作系统本身并打开explorer,就不再有任何覆盖

我的第一个想法是:

  • 让实际管理文件状态的服务检测到没有请求进入,只需重新注册覆盖处理程序
这里的问题是注册需要提升权限,这在最终用户初次安装应用程序时是可以接受的,但不是每次重新启动计算机时都可以接受

有人能告诉我这里可能遗漏了什么吗? 我将BaseOverlay类及其子类放在一个.py文件中,并通过使用subprocess调用此脚本从我的主应用程序注册

subprocess.check_call(script_path, shell=True)
浏览器不能重新加载脚本,因为它是Python吗?我需要编译成DLL或EXE吗?这会改变注册过程吗

这是注册电话:

win32com.server.register.UseCommandLine(BaseOverlay)
下面是课程(简化):

class BaseOverlay:
    _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]

    def GetOverlayInfo(self):
        return icon_path, 0, shellcon.ISIOI_ICONFILE

    def GetPriority(self):
        return 50

    def IsMemberOf(self, fname, attributes):
        return winerror.S_OK