Inno setup 在Inno安装程序中设置ToStatActivator CLSID快捷方式属性

Inno setup 在Inno安装程序中设置ToStatActivator CLSID快捷方式属性,inno-setup,pascalscript,Inno Setup,Pascalscript,我正在尝试为Win32应用程序启用Windows 10 toast通知。根据win docs(),我需要在“开始”菜单中创建一个快捷方式,并设置aumi id和activator clsid属性。Win docs示例使用WiX安装程序。有没有办法在Inno设置中设置这些属性 我尝试了Inno Setup和Windows COM组件的Pascal脚本功能。我设法设置了aumi id,但没有设置激活器clsid 我一直在重新创建WinAPI结构和联合,这些结构和联合必须作为参数传递到IPropert

我正在尝试为Win32应用程序启用Windows 10 toast通知。根据win docs(),我需要在“开始”菜单中创建一个快捷方式,并设置aumi id和activator clsid属性。Win docs示例使用WiX安装程序。有没有办法在Inno设置中设置这些属性

我尝试了Inno Setup和Windows COM组件的Pascal脚本功能。我设法设置了aumi id,但没有设置激活器clsid

我一直在重新创建WinAPI结构和联合,这些结构和联合必须作为参数传递到
IPropertyStore
COM接口

C代码-此结构必须传递到
IPropertyStore
方法
SetValue()

struct tagPROPVARIANT{
变异型vt;
已维修的管道1;
已维修的原焊盘2;
已维修的3号焊盘;
联合{
.
.
CLSID*puuid;
.
.
}
}
Inno Pascal脚本-声明
IPropertyStore
接口并重新创建
tagPROPVARIANT

[代码]
类型
IPropertyStore=接口(IUnknown)
程序假人;
程序dummy2;
程序dummy3;
函数SetValue(变量键:PROPERTYKEY;变量pv:tagPROPVARIANT):HResult;
程序dummy4;
结束;
tagPROPVARIANT=记录
vt:单词;
res1:单词;
res2:单词;
res3:单词;
//现在以某种方式重新创建包含72个成员的联合,其中我只需要一个指针(CLSID*puuid)
结束;
//然后我使用IShellLink、IPropertyStore和IPersistFile
//用于在“开始”菜单中创建快捷方式的接口,其中必须使用IPropertyStore设置所需的属性。
//我设法重新创建了IShellLink和IPersistFile,因为它们不使用联合或指针
我可以创建“开始”菜单快捷方式,并将其AUMI设置为:

[Icons]
Name: "{group}\{#APP_NAME}"; Filename: "{app}\{#EXE_NAME}"; \
  AppUserModelID: "MyCompany.MyApp"
但我认为CLSID只能在
[code]
部分使用COM ITERFACE设置

基本上,我试图把这个C++代码重写到iNo安装脚本中,使事情变得更干净。
ComPtr-shellLink;
协同创建实例(
CLSID_ShellLink、nullptr、CLSCTX_INPROC_服务器、IID_PPV_参数(&ShellLink));
shellLink->SetPath(exePath);
shellLink->SetArguments(L“”);
shellLink->SetWorkingDirectory(exePath);
ComPtr propertyStore;
shellLink.As(&propertyStore);
tagPROPVARIANT-appIdPropVar;
InitPropVariantFromString(L“MyComp.MyApp”&appIdPropVar);
propertyStore->SetValue(PKEY\u AppUserModel\u ID,appIdPropVar);
//主要问题
GUID clsid=uuuIdof(通知激活器);
Tagprop变异体Clsidofmytoshandler;
clsidofmytashandler.vt=vt_CLSID;
clsidofmytashandler.puuid=&clsid;
propertyStore->SetValue(PKEY_AppUserModel_ToStataTivatorCmd,CLSIDOFMytoasHandler)
propertyStore->Commit();
ComPtr文件;
shellLink.As(&persistFile);
persistFile->Save(startMenuPath,TRUE);
PropVariantClear(&appIdPropVar);

Inno Setup 6.1现在可以通过指定来设置CLSID。

您可以在这里找到许多帮助您的代码: