【发布时间】:2017-11-23 00:08:27
【问题描述】:
这是我所拥有的(基于我从其他几篇 Stack Overflow 帖子和其他地方收集到的信息:
<Property Id="CACHEFOLDER">
<RegistrySearch Key="SOFTWARE\SIL\Transcelerator" Root="HKCU" Type="raw"
Id="CacheFolderRegSearch" Name="CachePath" />
</Property>
<Directory Id="TARGETDIR" Name="SourceDir
<!-- Transcelerator's cache folder in LocalAppData: -->
<!-- C:\Users\<current user>\AppData\Local\SIL\Transcelerator -->
<!-- This needs to be saved to a registry key so it can be cleaned up on uninstall and also purged when there is a new install in order to ensure that reparsing occurs. -->
<?define AppCacheFolder = "SIL\Transcelerator" ?>
<Component Id="CacheCleanup" Guid="{6A45D61D-EA73-4A8C-8941-B49A881ABB49}">
<RegistryValue Root="HKCU" Key="Software\SIL\Transcelerator" Name="CachePath"
Type="string" Value="[LocalAppData]$(var.AppCacheFolder)"
KeyPath="yes" />
<util:RemoveFolderEx On="both" Property="CACHEFOLDER"/>
</Component>
</Directory>
<Feature Id="MainApplication" Title="App Name" Level="1" Absent="disallow" Display="expand" AllowAdvertise="no" InstallDefault="local">
<ComponentRef Id="CacheCleanup" />
</Feature>
注意:最终,我想隐藏 MainApplication 功能,但现在看到它很舒服。
以下是我认为 WIX 日志文件的相关摘录:
AppSearch:属性:CACHEFOLDER,签名:CacheFolderRegSearch MSI (c) (38:F0) [18:25:39:116]:属性更改:添加 CACHEFOLDER 属性。其值为“SIL\Transcelerator”。 行动于 18:25:39 结束:AppSearch。返回值 1。
...
MSI (c) (38:F0) [18:25:45:594]:切换到服务器:PARATEEXT7="C:\Program Files (x86)\Paratext 7\" PARATEEXT7TEST="C:\Program Files (x86)\ParatextDir7Test\" PARATEEXT8="C:\Program Files (x86)\Paratext 8\" PARATEEXT8TEST="C:\Program Files (x86)\ParatextDir8Test\" PARATEEXT75100ORGREATER="C:\Program Files (x86)\ Paratext 7\Paratext.exe" CACHEFOLDER="SIL\Transcelerator" TARGETDIR="C:\" INSTALLDIR7="C:\Program Files (x86)\Paratext 7\plugins\Transcelerator\" INSTALLDIR7TEST="C:\Program Files ( x86)\ParatextDir7Test\plugins\Transcelerator\" INSTALLDIR8="C:\Program Files (x86)\Paratext 8\plugins\Transcelerator\" INSTALLDIR8TEST="C:\Program Files (x86)\ParatextDir8Test\plugins\Transcelerator\" PLUGINDIR7 ="C:\Program Files (x86)\Paratext 7\plugins\" PLUGINDIR7TEST="C:\Program Files (x86)\ParatextDir7Test\plugins\" PLUGINDIR8="C:\Program Files (x86)\Paratext 8\plugins \" PLUGINDIR8TEST="C:\Program Files (x86)\ParatextDir8Test\plugins\" CURRENTDIRECTORY="C:\Projects\Transcelerator" CLIENTUILEVEL="0" CLIENTPROCESSID="17976" SOURCEDIR="C:\Projects\Transcelerator\output\installer\" ACTION="INSTALL" EXE
...
MSI (s) (E4:44) [18:25:46:006]:属性更改:添加 CACHEFOLDER 属性。它的值为'SIL\Transcelerator'。
...
行动 18:25:46:WixRemoveFoldersEx。 行动开始 18:25:46:WixRemoveFoldersEx。 MSI (s) (E4:00) [18:25:46:041]:调用远程自定义操作。 DLL:C:\Windows\Installer\MSI6019.tmp,入口点:WixRemoveFoldersEx MSI (s) (E4:78) [18:25:46:042]:生成随机 cookie。 MSI (s) (E4:78) [18:25:46:044]:使用 PID 18712 (0x4918) 创建了自定义操作服务器。 MSI (s) (E4:54) [18:25:46:067]:作为服务运行。 MSI (s) (E4:54) [18:25:46:069]:您好,我是您的 32 位模拟自定义操作服务器。 WixRemoveFoldersEx:递归路径:SIL\Transcelerator\ 用于行:wrfA9D8B049E87ACFF02034C5FFCFB64E42。 WixRemoveFoldersEx:未找到搜索路径:SIL\Transcelerator* 行动于 18:25:46 结束:WixRemoveFoldersEx。返回值 1。
...
MSI (s) (E4:44) [18:25:46:267]:执行操作:ComponentRegister(ComponentId={6A45D61D-EA73-4A8C-8941-B49A881ABB49},KeyPath=01:\Software\SIL\ Transcelerator\CachePath,State=3,,Disk=1,SharedDllRefCount=0,BinaryType=0) 1: {97A212AC-E01E-486A-A220-AF9BBBC79E87} 2: {6A45D61D-EA73-4A8C-8941-B49A881ABB49} 3: 01:\Software\SIL\Transcelerator\CachePath
...
MSI (s) (E4:44) [18:25:46:597]:执行操作:RegOpenKey(Root=-2147483647,Key=Software\SIL\Transcelerator,,BinaryType=0,,) MSI (s) (E4:44) [18:25:46:597]:执行操作:RegAddValue(Name=CachePath,Value=SIL\Transcelerator,) WriteRegistryValues:键:\Software\SIL\Transcelerator,名称:CachePath,值:SIL\Transcelerator
...
属性(S):CACHEFOLDER = SIL\Transcelerator
似乎没有任何相关内容被添加到注册表中。 (在某一时刻,它似乎正在添加一些具有正确 GUID 的内容来告诉它执行卸载操作,但现在我无法弄清楚我改变了什么才能让它消失。)并且 C 中没有文件或子文件夹: \Users\bogle\AppData\Local\SIL\Transcelerator 在安装或卸载时都会被删除。我还尝试从 On="both" 更改为 On="Uninstall" 以查看是否可以使其正常工作,但没有骰子。
【问题讨论】:
-
"SIL\Transcelerator" 不是有效的完整路径? RemoveFolderEx 的 Property 属性上的信息说它是“解析为源目录完整路径的属性的 id。”您希望 CACHEFOLDER 为“C:\Users\bogle\AppData\Local\SIL\Transcelerator”
-
是的,但我不知道如何做到这一点。
-
根据this article 和其他人的说法,将 [LocalAppData] 放在 RegistryKey 的 Value 属性中应该会导致它在当前用户的 AppData\Local 文件夹中添加根路径,但它对我不起作用。
-
当我使用 RemoveFolderEx 时,我刚刚读取了一个注册表项,该注册表项具有完整路径作为其值,就像您链接的文章一样。看起来属性名称实际上应该是“LocalAppDataFolder”msdn.microsoft.com/en-us/library/aa369768(v=vs.85).aspx
-
我也尝试过 LocalAppDataFolder,但没有任何区别。
标签: wix windows-installer uninstallation