下面的ProgId和ApplicationName是哪里来的?我如何查询这些特定字段以制作我自己的文件关联xml文件?你可以通过运行得到这个文件Dism.exe/online/Export-DefaultAppAssociations:C:\Temp\DefaultApps.xml例如什么是“ChromeHtml”?我在哪里可以检索这个ProgId?什么是“Applications\notepad.exe”? 最佳答案 ProgId在这种情况下:TheShellusesaprogrammaticidentifier(ProgID)r
ThisMSDNarticle声明任何ProgID都必须满足几个正式要求,包括长度限制。然而,没有说明如果违反这些规定会发生什么。我在我们的代码库中发现了几个地方,其中ProgID的长度超过39个字符,但一切似乎都对它们有效,包括ProgIDFromCLSID()和CLSIDFromProgID()。由于违反这些要求非常容易,因此了解此类违反的实际可能后果是什么将非常有趣? 最佳答案 我猜你得到的是未定义的行为。这可能包括从正常运行到崩溃、小猫被吃掉、长子被牺牲等等。更重要的是,一些要求可能会告诉您一些事情:不超过39个字符:其他软
我正在研究一组本质上是插件的东西,它们是COM服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的ProgID。当插件需要访问配置项时,它会调用并传入其ProgID和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的ProgID,每个ProgID将指向插件的单个ClsId。因此,插件的每个实例都将由其ProgID标识,ProgID仍用作配置数据的主键,并且一切都是100%向后兼容的。那么,问题:这是一种可以接受的技术吗?(多个ProgID都指向一个
有没有一种方法可以执行progid动词的命令,而无需深入研究注册表并进行字符串操作?我可以使用ShObjIdl.idl运行以下命令来获取默认浏览器的ProgId:varreg=newShellObjects.ApplicationAssociationRegistration();stringprogID;reg.QueryCurrentDefault("http",ShellObjects.ASSOCIATIONTYPE.AT_URLPROTOCOL,ShellObjects.ASSOCIATIONLEVEL.AL_EFFECTIVE,outprogID);这给了我“ChromeHT
在给定类型库中包含的COM类的ProgID或CLSID的情况下,如何以编程方式获取类型库的路径或LIBID,而不实例化COM对象?对于某些COM对象,您可以通过注册表路径实现HKEY_CLASSES_ROOT\CLSID\{clsid}\TypeLib但是有些COM对象没有TypeLib键,比如Word.Application:如何在不实例化COM对象的情况下确定这些COM对象的类型库路径或LIBID? 最佳答案 类型库可能与给定的CLSID相关联,也可能不相关联。如果您在注册表中没有类型库引用,您可能更幸运地在运行时使用IDisp