Ух упарился писать батник, в итоге всё равно пришлось ставить AutoIt чтоб перебрать с RunWait, но костыли напишу.
Код:
rem название гаджета
set gadget=ItsPanel.gadget
rem запуск скрипта упаковки гаджета
cd /d %~d0%~p0
start /wait /d "%~d0%~p0" build_itspanel.exe
md "%LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgets\%gadget%"
"%~d0%~p07z.exe" x -y -o"%LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgets\%gadget%" "%~d0%~p0%gadget%"
rem костыль
%LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgets\%gadget%\bin\_fix.bat
rem перезапуск гаджетов
taskkill /IM sidebar.exe /F
start sidebar.exe
упаковщик, мож кому интересно
Скрытый текст
Код:
$gfilename = "ItsPanel" ;название файла гаджета
$dirsrc = "ItsPanel_gadget" ;папка распакованного гаджета
$logfile = '~build_log.txt' ;лог 7z
$gadgetxml = $gfilename & "_gadget\gadget.xml" ;путь к конфигурации гаджета (в папке гаджета)
$name="Its Panel" ;название гаджета
$version=@YEAR & "." & @YDAY & "." & @MIN & @SEC
;$version=@YEAR & "." & @MON & "." & @MDAY & "." & @HOUR & "." & @MIN & "." & @SEC
$page="pages/page0.html" ;стартовая страница гаджета
$dirbak = "backup\" ;бэкап упакованого гаджета перред сборкой
$gfilebak = $gfilename & "_bak" & @YEAR & @YDAY & @MIN & @SEC & ".gadget" ;имя бэкапа гаджета
$hFile = FileOpen($gadgetxml, 2)
; Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $hFile = -1 Then
MsgBox(4096, "Ошибка", "Невозможно открыть файл: " & @CRLF & $gadgetxml)
Exit
EndIf
FileWriteLine($hFile, "<?xml version=""1.0"" encoding=""utf-8"" ?>" & @CRLF)
FileWriteLine($hFile, "<gadget>" & @CRLF & @TAB & "<name>" & $name & "</name>" & @CRLF)
FileWriteLine($hFile, @TAB & "<version>" & $version & "</version>" & @CRLF)
FileWriteLine($hFile, @TAB & "<hosts>" & @CRLF & @TAB & @TAB & "<host name=""sidebar"">" & @CRLF)
FileWriteLine($hFile, @TAB & @TAB & "<base type=""HTML"" apiVersion=""1.0.0"" src=""" & $page & """ />" & @CRLF)
FileWriteLine($hFile, @TAB & @TAB & "<permissions>full</permissions>" & @CRLF)
FileWriteLine($hFile, @TAB & @TAB & "<platform minPlatformVersion=""0.3"" />" & @CRLF)
FileWriteLine($hFile, @TAB & @TAB & "</host>" & @CRLF & @TAB & "</hosts>" & @CRLF & "</gadget>" & @CRLF)
FileClose($hFile)
FileMove ($gfilename & ".gadget" , $dirbak & $gfilebak , 9 )
RunWait(@ComSpec & " /c" & '7z.exe a -tzip ' & $gfilename & '.gadget .\' & $dirsrc & '\* >' & $logfile , "", @SW_HIDE)
В общем подход создавать .gadget изначально плохая идея.
Установка требует подтверждения намекая на подпись, при этом перед этим гаджет надо закрыть.
И этот при/перед, при закрытии гаджета чаще всего надо запускать по новой потомучто окно подтверждения тоже закрывается.
В общем это долго.
Вторая проблема, невозможно упаковать в .gadget системные папки с именем "Компьютер.{20D04FE0-3AEA-1069-A2D8-08002B30309D}" и приходится запускать .bat вручную из гаджета, что не удобно и опять же долго.
Возможно както можно выполнить .js после установки гаджета, но таких решений не нашлось.
Так что наверно делать гаджет в обычный 7z sfx .exe, сразу решит 2 проблемы.
Только его придётся запускать вручную через меню гаджетов при первой установке.
Но быть может есть какието решения через команду.
Но мне кажется это проще чем тыкать гдето в гаджете кнопку фикса