Здравствуйте!
A>> Аргумент в некотором смысле по делу, конечно.
Но as is. Хотелось бы решить как-то изящнее (читай — правильно).
bnk> Ну а чего, лично я бы так и сделал наверное.
bnk> Все вроде в рамках Windows Installer, должно валидироваться. RemoveFolder — просто строчка в таблице, тоже вроде не криминал..
Решил попробовать — не работает. Удивился.
Вот фрагмент:
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="CompanyDir" Name="$(var.COMPANY_DIR_SHORT)" LongName="$(var.COMPANY_DIR)">
<Directory Id="INSTALLDIR" Name="$(var.PROG_DIR)">
<Directory Id="DataDir" Name="DATA">
<Directory Id="DataStorageDir" Name="FS" LongName="DataStorage">
<Component Id="RemoveDataStorage" Guid="!GUID1!">
<RemoveFile Id="DataStorageFiles" Name="*.*" On="uninstall" />
<RemoveFolder Id="DataStorageDir" On="uninstall" />
</Component>
</Directory> <!-- ".\PROG\DATA\DataStorage" -->
<Component Id="RemoveConfigs" Guid="!GUID2!">
<RemoveFile Id="progcfg.bin" Name="progcfg.bin" On="uninstall" />
<RemoveFile Id="progdata.bin" Name="progdata.bin" On="uninstall" />
<RemoveFolder Id="DataDir" On="uninstall" />
<RemoveFolder Id="INSTALLDIR" On="uninstall" />
<RemoveFolder Id="CompanyDir" On="uninstall" />
</Component>
</Directory> <!-- ".\PROG\DATA" -->
[...]
Вот лог:
RemoveEnvironmentStrings: Name: Updating environment strings, Value: , Action
Action ended 18:20:26: RemoveEnvironmentStrings. Return value 1.
MSI (s) (E0:14) [18:20:26:742]: Doing action: RemoveFiles
MSI (s) (E0:14) [18:20:26:742]: Note: 1: 2205 2: 3: ActionText
Action 18:20:26: RemoveFiles. Removing files
Action start 18:20:26: RemoveFiles.
RemoveFiles: File: Removing files, Directory:
MSI (s) (E0:14) [18:20:26:758]: Counted 4 foreign folders to be removed.
MSI (s) (E0:14) [18:20:26:758]: Removing child folder of C:\Program Files\CompanyName\PROG\DATA\ (child: C:\Program Files\CompanyName\PROG\DATA\DataStorage\)
MSI (s) (E0:14) [18:20:26:758]: Removing foreign folder: C:\Program Files\CompanyName\PROG\DATA\DataStorage\
MSI (s) (E0:14) [18:20:26:758]: Removing foreign folder: C:\Program Files\CompanyName\PROG\DATA\
MSI (s) (E0:14) [18:20:26:758]: Removing foreign folder: C:\Program Files\CompanyName\PROG\DATA\
MSI (s) (E0:14) [18:20:26:774]: Removing foreign folder: C:\Program Files\CompanyName\PROG\DATA\
Action ended 18:20:26: RemoveFiles. Return value 1.
MSI (s) (E0:14) [18:20:26:774]: Doing action: InstallFiles
MSI (s) (E0:14) [18:20:26:774]: Note: 1: 2205 2: 3: ActionText
Action 18:20:26: InstallFiles. Copying new files
Action start 18:20:26: InstallFiles.
Результат: присутствуют пустые каталоги C:\Program Files\CompanyName\PROG\ (внутри ни файлов, ни подкаталогов нет).