coherent Вновь мое запоздалое: спасибо за помощь.
В итоге я отказался от использования, старого loader.exe, походу к новым UltraISO он равнодушен. Зато нашел способ запуска и удаления дров UltraIso через батники (это его родные команды):
Install.bat
IsoCmd.exe -i
Remove.bat
IsoCmd.exe -r
В отличие от loader.exe команда «IsoCmd.exe –r» удаляет не только дрова, но и чистит хвосты в реестре.
Запуск портабелки проходит в WinXP нормально (ThinApp 4.7), но наблюдаются странности в Win7x64 (ThinApp 5.01-5.1):
- если все делать через ThinApp 5.0.1 (сканирование, установка и создание билда), то иногда не удаляются дрова, требуется перезагрузка
- если проект, который вначале был скомпилирован в ThinApp 5.0.1, упаковать в ThinApp 5.1 (инсталлированной версией), то все ОК.
- и еще, лучше копировать и запускать дрова из C:\Windows, из других директорий происходят глюки.
Параметры сборки:
В Package.ini обязательно вписать WorkingDirectory=%SystemRoot%.
В Package.in я еще указал параметры:
ChildProcessEnvironmentExceptions=CMD.EXE
ChildProcessEnvironmentDefault=External
LargeAddressAware=1
AllowExternalKernelModeServices=1
AllowExternalProcessModifications=1
UACRequestedPrivilegesLevel=highestAvailable
AutoStartServices=0
AutoShutdownServices=1
Пока не проверял, может, некоторые параметры и не нужны, но с ними работает.
В папке проекта %SystemRoot% указать ##Attributes.ini = Merged, ну и в папки куда установлена прога все Merged.
Вот и сам скрипт для копирования удаления файлов (приходится копировать файлы, а не папку, поскольку очень часто папка не удаляется):
[more=Script]Option Explicit
Dim fso, SourcePath, MyProgPath, MyProgSource1, MyProgSource2, MyProgSource3, MyProgSource4, MyProgSource5, MyProgDest1, MyProgDest2, MyProgDest3, MyProgDest4, MyProgDest5, id, ib
Function OnFirstSandboxOwner
Set fso = CreateObject("Scripting.FileSystemObject")
SourcePath = ExpandPath("%SystemRoot%")
MyProgPath = ExpandPath("%drive_C%\UltraISO1\drivers")
MyProgSource1 = MyProgPath & "\Install.bat"
MyProgSource2 = MyProgPath & "\Remove.bat"
MyProgSource3 = MyProgPath & "\IsoCmd.exe"
MyProgSource4 = MyProgPath & "\ISODrive.sys"
MyProgSource5 = MyProgPath & "\ISODrv64.sys"
MyProgDest1 = SourcePath & "\Install.bat"
MyProgDest2 = SourcePath & "\Remove.bat"
MyProgDest3 = SourcePath & "\IsoCmd.exe"
MyProgDest4 = SourcePath & "\ISODrive.sys"
MyProgDest5 = SourcePath & "\ISODrv64.sys"
If not fso.FileExists(MyProgDest1) then
fso.CopyFile MyProgSource1, MyProgDest1
End If
If not fso.FileExists(MyProgDest2) then
fso.CopyFile MyProgSource2, MyProgDest2
End If
If not fso.FileExists(MyProgDest3) then
fso.CopyFile MyProgSource3, MyProgDest3
End If
If not fso.FileExists(MyProgDest4) then
fso.CopyFile MyProgSource4, MyProgDest4
End If
If not fso.FileExists(MyProgDest5) then
fso.CopyFile MyProgSource5, MyProgDest5
End If
id = ExecuteExternalProcess("C:\WINDOWS\Install.bat")
WaitForProcess id, 0
End Function
Function OnLastProcessExit
id = ExecuteExternalProcess("C:\WINDOWS\Remove.bat")
WaitForProcess id, 0
If fso.FileExists(MyProgDest1) Then
fso.DeleteFile(MyProgDest1)
End if
If fso.FileExists(MyProgDest2) Then
fso.DeleteFile(MyProgDest2)
End if
If fso.FileExists(MyProgDest3) Then
fso.DeleteFile(MyProgDest3)
End if
If fso.FileExists(MyProgDest4) Then
fso.DeleteFile(MyProgDest4)
End if
If fso.FileExists(MyProgDest5) Then
fso.DeleteFile(MyProgDest5)
End if
End Function [/more]
Может, подскажешь, как упростить этот скрипт, я имею в виду не писать кучу строк типа MyProgDest1…5.
Добавлено: bumburbia AVanti473 правильно писал (хоть и как обычно много буковок, но я уже научился фильтровать
, у каждого свой стиль писанины)
Цитата: Но, если даже такие права сборка ThinApp и получит (что сомнительно), то врятли ей это поможет в "прокидывании" через контейнер всех свойств Total Uninstall
UACRequestedPrivilegesLevel=requireAdministrator - отключает только UAC (Контроль учётных записей пользователей), типа не будет назойливой таблички с вопросом "Вы хотите запустить...". Но, если попытаться, что-то скопировать (например, через скрипт), например, на диск С:\ из под обычного пользователя, то "Отказ в доступе" (я тут спрашивал как скопировать скрипт). Поэтому надо запускать портабелку через ПКМ - запуск от имени администратора. Этот параметр UACRequestedPrivilegesLevel я пробовал и уже наступил на эти грабли, зачем этот параметр в ThinApp нужен так и не понял.