1 (изменено: Mambr, 2017-12-07 23:51:17)

Тема: AHK: Пакетный FileInstall

Добрый день!
Утомил до чертей зеленых FileInstall по-одному файлу!
Кроме zip'ования или FileInstall по составленному списку (ваще жуть!), есть еще какие-либо решения, чтоб сразу всю директорию заинсталлить???

2 (изменено: MandarinKa02, 2017-12-08 01:36:03)

Re: AHK: Пакетный FileInstall

Я использую Base64 и присваиваю переменным в скрипте.

К примеру, в эту функцию передаем параметр path и распаковывается фотография.

_Base64_UnpackPhoto1(path) {
	var0:=104
	var1:="..."
	var2:="..."
	//...
	var104:="..."
	loop % var0
		Base64_Decode(A_LoopField, ...)
}

3

Re: AHK: Пакетный FileInstall

• Зачем компилируете? Если для распространения, то посмотрите NSIS, Smart Install Maker, etc.
• Чем не устраивает zip, если распаковка занимает две строчки кода. Для запаковки можно написать батник или скрипт и запускать перед компиляцией.

4 (изменено: Mambr, 2017-12-09 01:52:39)

Re: AHK: Пакетный FileInstall

Иногда даю скрипты своему другу, а AHK у него не установлен, потому приходится компилить, да и чайник он в компах.
Он не понимает, что такое скрипт и как его съесть. Для него exe - это понятная штука - клацнул мышой и все заработало!
Для создания установщиков я использую Advanced installer. Он мне больше нравиться.
Просто иногда не хочется возиться с созданием инсталллеров, а куча дополнительных файлов тоже вроде как не комильфо.
Использовать для распаковки "чужеродный" скрипт тоже не хочется ...

Я тут набросок сделал одной схемы, пока еще не опробовал:


SrcArch := A_ScriptDir "\SrcArch.zip"
SrcDir := A_ScriptDir "\" ; извлечечь в данную директорию
InsDir := A_ScriptDir "\SrcDir" ; директория с доп. файлами

If !FileExist(InsDir) {
	FileInstall SrcArch.zip, % SrcArch, 1
	UnZip(SrcArch, SrcDir)
	}
Return

UnZip(SrcArch, SrcDir) {
	psh := ComObjCreate("Shell.Application")
	psh.Namespace(SrcDir).CopyHere(psh.Namespace(SrcArch).items, 4|16)
}

как-то так ... Нужно, чтобы zip'ированный файл тоже не валялся рядом, добавить еще FileDelete *.zip после распаковки.
Возможно надо еще допиливать, т.к. это просто схема.

Хотел узнать, может есть более "элегантные" решения ...

5

Re: AHK: Пакетный FileInstall

Создайте в папке некомпилированного скрипта с #Include *i , скрипт для создания Include, в нём перечень папок, он их обработает, создаст Include с кучей FileInstall, запустит компилятор, удалит Include.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Пакетный FileInstall

serzh82saratov, не понял. Немного подробнее, если можно ...

7

Re: AHK: Пакетный FileInstall

Mambr, вы как и большинство не в курсе простого способа распространения:
переименовываем интерпретатор AutoHotkey.exe по имени вашего скрипта и засовываем в одну с ним папку. При запуске ехе будет автоматически запускаться одноименный ahk.

8 (изменено: Mambr, 2017-12-09 07:19:33)

Re: AHK: Пакетный FileInstall

stealzy, благодарю за инфу! Я действительно не знал это. Очень полезная штука!
Но вопрос еще и в том, куда засунуть доп. файлы, чтобы не было "большой кучи всего".
И что б по-быстрому все было ... Ведь как известно - лень - двигатель прогресса!

9 (изменено: stealzy, 2017-12-09 07:26:00)

Re: AHK: Пакетный FileInstall

В подпапку, разумеется. myPicPath := A_ScriptDir "\resource\pic.png". Да и вообще, для пользователя обычно создают ярлыки в меню пуск и на стол.

10

Re: AHK: Пакетный FileInstall

Но тогда придется делать инсталлер ...

11 (изменено: stealzy, 2017-12-09 07:38:12)

Re: AHK: Пакетный FileInstall

Зачем? При первом запуске создаются ярлыки и все. А как вы сами запускаете свой скрипт, каждый раз лазиете в папку, где он находится?

If !FileExist(A_ScriptDir "\My.ini")
    FileCreateShortcut, "%A_AHKPath%", %A_Desktop%\MyScript.lnk, "%A_ScriptDir%", "%A_ScriptFullPath%",, %A_ScriptDir%\resource\My.ico

12 (изменено: Mambr, 2017-12-09 07:39:30)

Re: AHK: Пакетный FileInstall

Иногда, когда очень большая лень, я делаю инсталлеры с помощью HaoZip - SFX.
Он жмет в 7zip - очень плотно и линки делает где надо. А еще можно один и тот-же готовый инсталлер использовать до бесконечности.
HaoZip открывает exe - удаляю содержимое, заливаю нужные файлы и редактирую инфу в свойтвах - название, где линки делать и прочую лабуду.

FileCreateShortcut я тоже иногда использую ...

13

Re: AHK: Пакетный FileInstall

Mambr пишет:

Он не понимает, что такое скрипт и как его съесть. Для него exe - это понятная штука - клацнул мышой и все заработало!

Не проще ли вам установить ему автохотки и тогда разницы с экзешником он не заметит - так же тыкнул мышью и все заработало.

14

Re: AHK: Пакетный FileInstall

Инсталлер отличается только тем, что появляются записи в реестре и прогу можно удалить из "Мои программы". Такое можно тоже сделать на ahk - пример.
А в архив и так можно сжать.

15

Re: AHK: Пакетный FileInstall

Malcev пишет:

Не проще ли вам установить ему автохотки и тогда разницы с экзешником он не заметит - так же тыкнул мышью и все заработало.

Вероятно, так и придется сделать. Уже задумывался над этим вопросом. Сегодня пойду ему винду переустанавливать, и поставлю AHK, чтоб он мне мозг не выносил ...

16

Re: AHK: Пакетный FileInstall

stealzy пишет:

чем устанавливать каждому.

Так речь шла об одном человеке. Поэтому проще установить.

17

Re: AHK: Пакетный FileInstall

Да, я только для друга делаю, а он у меня один.
В общем, варианты есть, теперь надо выбрать "для самых ленивых".

18 (изменено: serzh82saratov, 2017-12-10 09:20:39)

Re: AHK: Пакетный FileInstall

Mambr пишет:

serzh82saratov, не понял. Немного подробнее, если можно ...


#SingleInstance Force
#NoEnv
SetWorkingDir %A_ScriptDir%
ListLines Off
SetBatchLines -1

ScriptName = Script.ahk  ;	скрипт который будем компилировать
IncludeName = FileInstallInclude.ahk

  ;	File на примере - D:\Folder1\Folder2 после указываем | Dest
  ;	Dest - если `%A_Temp`%\MyFolder, то распакуется по пути  - %A_Temp%\MyFolder
  ;	Знаки процента надо экранировать
  ;	Dest - если пусто, то распакуется по такому же пути - D:\Folder1\Folder2
  ;	Вместо папки можно добавить файл
  
List = 
( 
%A_ScriptDir% | MyFolder
)
	
Loop, Parse, List, `n
{
	File := StrSplit(A_LoopField, "|", A_Space A_Tab)[1]
	Dest := StrSplit(A_LoopField, "|", A_Space A_Tab)[2] 
	isFolder := InStr(FileExist(File), "D") ? "\*.*" : ""
	Loop, %File%%isFolder%, , 1
	{
		If (Dest = "")
			Add := A_LoopFileLongPath
		Else
			Add := Dest . StrReplace(A_LoopFileLongPath, File, "", , 1) 
		SplitPath, Add, , Dir
		DirList0 .= Dir "`n"
		IncludeList .= "FileInstall`, " A_LoopFileLongPath "`, " Add "`, 1`n"
	}
}
Sort, DirList0, U`n
DirList0 := RegExReplace(DirList0,"sm`a)^(.+)\\.*\K^\1(\R|$)|^(.+)(\R|$)(?=.*^\3\\)")  ;	http://forum.script-coding.com/viewtopic.php?pid=113785#p113785
Loop, Parse, % Trim(DirList0, "`n"), `n
	DirList .= "FileCreateDir`, " A_LoopField "`n"
FileDelete, %IncludeName% 
FileAppend, % DirList . IncludeList, % IncludeName
MsgBox % DirList . IncludeList
RunWait Ahk2Exe.exe /in %ScriptName%
FileDelete, %IncludeName%
ExitApp
Escape:: ExitApp

В начало скрипта добавляем #Include *i:

#Include *i %A_ScriptDir%\FileInstallInclude.ahk

И зачем так сделано, что FileInstall сам не создаёт папки в которые будет извлекать файлы...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui