Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 64
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ух упарился писать батник, в итоге всё равно пришлось ставить 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 проблемы.
Только его придётся запускать вручную через меню гаджетов при первой установке.
Но быть может есть какието решения через команду.
Но мне кажется это проще чем тыкать гдето в гаджете кнопку фикса

Отправлено: 23:26, 26-08-2018 | #4