Общие изменения песочницы Package.ini в ThinApp.
После того, как ThinApp сделает второй снимок системы (Postscan) откроется последнее перед сборкой окно Ready to Build, в котором есть кнопка Edit Package.ini, кликнув по которой можно открыть готовый к редактированию файл песочницы.
В нашем случае он выглядит так:
;
This file can be used to configure build and runtime options for packages
; Lines that begin with a semicolon contain only comments and do not have any effect
; For documentation and to obtain a complete list of options available visit:
;
; http://www.vmware.com/info?id=906
;
[Compression]
CompressionType=Fast[Isolation]
DirectoryIsolationMode=Merged[BuildOptions]
;-------- MSI Parameters ----------
;Enable MSIFilename if you want to generate a Windows Installer package.
;MSIFilename=CCleaner (remove only).msi
;MSIManufacturer=дом
;MSIProductVersion=1.0
;MSIDefaultInstallAllUsers=1
;MSIRequireElevatedPrivileges=1
;MSIInstallDirectory=CCleaner (remove only) (VMware ThinApp)
;MSIProductCode={DA24F904-DD58-1B5E-5A6E-2972AEB6BBBC}
;MSIUpgradeCode={E374C71F-ECB7-09FF-2034-BEF7FB3F0F89}
;MSIStreaming=0
;MSICompressionType=Fast
;MSIArpProductIcon=%ProgramFilesDir%\CCleaner\CCleaner.exe;-------- AppSync Parameters ----------
;AppSyncURL=https://example.com/some/path/PackageName.exe
;AppSyncUpdateFrequency=1d
;AppSyncExpirePeriod=30d
;AppSyncWarningPeriod=5d
;AppSyncWarningFrequency=1d
;AppSyncWarningMessage=This application will become unavailable for use in %remaining_days% day(s) if it cannot contact its update server. Check your network connection to ensure uninterrupted service.
;AppSyncExpireMessage=This application has been unable to contact its update server for %expire_days% day(s), so it is unavailable for use. Check your network connection and try again.
;AppSyncUpdatedMessage=
;AppSyncClearSandboxOnUpdate=0;-------- Parameters used only during Setup Capture ----------
SandboxPath=.
AccessDeniedMsg=You are not currently authorized to run this application. Please contact your administrator.
CapturedUsingVersion=4.7.2-771812
OutDir=bin;-------- General Purpose Parameters ----------
SandboxName=CCleaner (remove only)
InventoryName=CCleaner (remove only)
InventoryIcon=%ProgramFilesDir%\CCleaner\CCleaner.exe
;PermittedGroups=Administrators;Remote Desktop Users
;RemoveSandboxOnExit=1
;RemoveSandboxOnStart=1
;SandboxNetworkDrives=1
;SandboxRemovableDisk=1
;VirtualizeExternalOutOfProcessCOM=0;OptionalAppLinks=plugins\*.exe
;RequiredAppLinks=\\server\share\*.exe;c:\abs\path\file.exe
VirtualDrives=Drive=c, Serial=b0a9c3db, Type=FIXED
;VirtualDrives=Drive=a, Serial=009c1630, Type=REMOVABLE; Drive=c, Serial=b0a9c3db, Type=FIXED; Drive=d, Serial=b0a9c3db, Type=CDROM
;VirtualComputerName=5FCC73CEE4AA415AnsiCodePage=1251
LocaleIdentifier=1049; If you have problems running a 32 bit application under 64 bit Windows, try enabling this line before building the project
;Wow64=0; Enable this option to load .Net binaries from the system instead of the package on Windows 7
;LoadDotNetFromSystem=Win7QualityReportingEnabled=0
; Enable this option to ignore DDE messages from external processes
;IgnoreDDEMessages=1[CCleaner.exe]
Source=%ProgramFilesDir%\CCleaner\CCleaner.exe
;Change ReadOnlyData to bin\Package.ro.tvr to build with old versions(4.6.0 or earlier) of tools
ReadOnlyData=Package.ro.tvr
WorkingDirectory=%ProgramFilesDir%\CCleaner
Protocols=cclaunch
Shortcuts=%Programs%\CCleaner;%Desktop%[Uninstall CCleaner.exe]
Source=%ProgramFilesDir%\CCleaner\uninst.exe
Shortcut=CCleaner.exe
WorkingDirectory=%ProgramFilesDir%\CCleaner
Shortcuts=%Programs%\CCleaner[CCleaner Homepage.exe]
Source=%Programs%\CCleaner\CCleaner Homepage.url
Shortcut=CCleaner.exe
Shortcuts=%Programs%\CCleaner[uninst.exe]
Source=%ProgramFilesDir%\CCleaner\uninst.exe
Shortcut=CCleaner.exe
Disabled=1[cmd.exe]
Source=%SystemSystem%\cmd.exe
Shortcut=CCleaner.exe
Disabled=1[regedit.exe]
Source=%SystemRoot%\regedit.exe
Shortcut=CCleaner.exe
Disabled=1
Как видно из файла собирался CCleaner, хотя эту программу нет смысла делать портативной в ThinApp, переносная версия есть на официальном сайте производителя.
Для начала надо найти раздел [Compression], тип компрессии может быть Fast и None, то есть с компрессией или без неё.
Но, хотя в окне Package Settings и была поставлена галочка на Compress virtual package, сжатие конечного файла будет не максимально возможным. Увеличить сжатие можно дописав ниже в блоке строку (OptimizeFor=Disk), конечный блок кода будет выглядеть так:
[Compression]
CompressionType=Fast
OptimizeFor=Disk
Следующий раздел [BuildOptions]. В нём находим блок Parameters used only during Setup Capture. Нужно найти здесь строку (SandboxPath=.), которая указывает расположение песочницы рядом с exe-файлом.
Сразу под ней прописываем строку (CachePath=), что расположит кэш в этой же песочнице. Еще ниже (ChildProcessEnvironmentDefault=External). Эта строка позволит запускать внешние приложения и не дублировать их в виртуальном контейнере.
Ниже стоит прописать строку (ChildProcessEnvironmentExceptions=hh.exe), которая устранит проблемы с запуском файла справки.
Общий вид блока будет выглядеть так:
;-------- Parameters used only during Setup Capture ----------
SandboxPath=.
CachePath=
ChildProcessEnvironmentDefault=External
ChildProcessEnvironmentExceptions=hh.exe
AccessDeniedMsg=You are not currently authorized to run this application. Please contact your administrator.
CapturedUsingVersion=4.7.2-771812
OutDir=bin
Дальше находим блок General Purpose Parameters (общие параметры), в котором находим строку (InventoryIcon=) и обязательно проверяем путь к ярлыку создаваемого проекта.
Дальше, в этом же блоке, переходим к строкам:
VirtualDrives=Drive=c, Serial=b0a9c3db, Type=FIXED
;VirtualDrives=Drive=a, Serial=009c1630, Type=REMOVABLE; Drive=c, Serial=b0a9c3db, Type=FIXED; Drive=d, Serial=b0a9c3db, Type=CDROM
;VirtualComputerName=5FCC73CEE4AA415
И удаляем (;) в начале строки ( ;VirtualComputerName=5FCC73CEE4AA415)
Для чего это нужно? В строках (VirtualDrives=Drive=c, Serial=b0a9c3db, Type=FIXED) и (;VirtualComputerName=5FCC73CEE4AA415) прописывается Volume ID данного компьютера. Удаление (;) фиксирует Volume ID данного компьютера, что позволит запускать сборку на других компах. Это актуально далеко не на всех сборках, но лучше не ленится и снимать (;) всегда, хуже уж точно не будет.
Еще ниже находим (;Wow64=0). Эту строку, по уверениям производителя, следует включить при возникновении проблем с запуском 32 битных приложений на Windows 64. Включаем удалив (;).
Конечно указанные изменения в Package.ini не гарантируют идеальную работу ВСЕХ ваших сборок, но процентов 80 портативок будет нормально функционировать. Решение более сложных проблем стоит поискать на ru-board.
Еще одна полезная опция для раздела [BuildOptions]. Убрать всплывающее окно в углу экрана можно прописав в этом разделе строку .ShowSB=0
Да, если ТА не пропатчен, эта строка хороший выход.