如何通过自定义操作读取程序包代码

五浦

是否可以通过自定义操作读取包装代码,就像读取ProductCode和ProductName一样。我想删除在%LOCALAPPDATA%/ Downloaded Installations / GUID中创建的MSI缓存,其中GUID是卸载过程中的软件包代码。

克里斯托弗·画家

您可能想看看我前一段时间写的这段代码:(整个线程很不错)

卸载时不会删除本地缓存的MSI

<CustomAction Id="PurgeCache_CAD_Install"  Execute="immediate" Property="PurgeCache" Value="/CacheRoot=[CommonAppDataFolder]Downloaded Installations\MyCompany\MyProduct /PackageCode=[PackageCode] /InstallMode=Install"/>
<CustomAction Id="PurgeCache_CAD_Uninstall" Execute="immediate" Property="PurgeCache" Value="/CacheRoot=[CommonAppDataFolder]Downloaded Installations\MyCompany\MyProduct /PackageCode=[PackageCode] /InstallMode=UnInstall"/>
<InstallExecuteSequence>
  <Custom Action="PurgeCache_CAD_Install" After="ScheduleReboot">Not REMOVE="ALL"/>
  <Custom Action="PurgeCache_CAD_Uninstall" After="ScheduleReboot">REMOVE="ALL"/>
</InstallExecuteSequence>

export prototype PurgeCache(HWND);  

function PurgeCache(hMSI)

    number nResult; 
    string szInstallMode;           
    string szCacheRoot;
        string szDir;
        string szPackageCode;
    LIST listDirs;   

begin

    szInstallMode = MsiGetCustomActionDataAttribute( hMSI, "/InstallMode=" );   
    szCacheRoot = MsiGetCustomActionDataAttribute( hMSI, "/CacheRoot=" );
    szPackageCode = MsiGetCustomActionDataAttribute( hMSI, "/PackageCode=" );

    listDirs = ListCreate (STRINGLIST);
    FindAllDirs( szCacheRoot, EXCLUDE_SUBDIR, listDirs );
    nResult = ListGetFirstString (listDirs, szDir);
    while (nResult != END_OF_LIST);  

        if ( szInstallMode = "Uninstall" || !( szDir % szPackageCode )) then
            DeleteDir( szDir, ALLCONTENTS );
        endif;
        nResult = ListGetNextString (listDirs, szDir);

    endwhile;

 return ERROR_SUCCESS;

end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为自定义程序包设置别名?

如何通过自定义代码调用“从XML文件读取值”操作?

构建自定义RPM,但程序包为空?

在自定义GO程序包之上提交

CakePHP:无法从自定义程序包加载类

Airflow无法导入自定义python程序包

Laradock-添加自定义npm程序包

导入自定义程序包显示“错误:程序包com不存在”

如何在自定义程序包中使用tidyselect“ where”?

如何在IntelliJ IDEA(Java)中导入自定义程序包?

如何将更多变体或自定义程序包添加到debootstrap?

如何动态重载自定义程序包中的模块?

我可以使用 Wix 自定义操作来确定是否安装引导程序包吗?

如何将自定义作曲家程序包放在Laravel的vendor文件夹之外?

R如何检查是否从某个程序包的特定函数中调用了自定义函数

如何在代码中的Amazon EMR引导操作上安装自定义包?

SSIS自定义日志提供程序-读取包参数

NameError:在自定义程序包中调用函数时未定义名称“ pd”

webapi,如何使用自定义模型绑定程序从POST / PUT操作读取文件

如何从Wix托管引导程序或自定义操作中读取某些注册表项?

具有依赖项初始化错误的自定义程序包:ModuleNotFoundError或ImportError

自定义程序包名称cxf-codegen-plugin

buildroot将错误的PREFIX附加到自定义程序包构建中

自定义节点程序包不提供名为

jax-ws导入和自定义程序包到名称空间的映射

外部程序包的自定义JSON封送处理

设置自定义Chocolatey程序包时出现空键错误

自定义通知布局:从程序包中发布的错误通知无法展开RemoteViews

Xamarin.forms中的nuGet程序包冲突的自定义呈现