Вопрос такой, есть ли в NSIS возможность на custom странице создать закладки?
» NSIS (Nullsoft Scriptable Install System)
Sanch8
Не понял что вы имеете ввиду? Может вашу идею можно проще реализовать?
Не понял что вы имеете ввиду? Может вашу идею можно проще реализовать?
Victor_VG
Пример на картинке
Пример на картинке
Sanch8
Вкладка не равна Закладка - смысл понятий разный, тот кто рисовал пример ошибся, бывает. Нет, этого вы в NSIS не сделаете - для этого нужно весь компилер под MDI переписывать, а он исходно сделан в SDI.
Вкладка не равна Закладка - смысл понятий разный, тот кто рисовал пример ошибся, бывает. Нет, этого вы в NSIS не сделаете - для этого нужно весь компилер под MDI переписывать, а он исходно сделан в SDI.
Victor_VG
Понял, думал плагин может какой поможет Пока такого вроде нет.
Понял, думал плагин может какой поможет Пока такого вроде нет.
Sanch8
Плагин в данном случае бесполезен т.к. поддержки MDI нет на уровне makensisw и стубов.
Плагин в данном случае бесполезен т.к. поддержки MDI нет на уровне makensisw и стубов.
Sanch8
Цитата:
Можно сделать нечто похожее... На первой кастомной странице, например, 3 кнопки, каждая из которых открывает новую кастомную страницу на той же позиции. Общее - на всех страницах одинаково, потому создастся эффект переключения как бы закладок на одной странице...
Можно переключать не страницы , а собственные окна (CreateWindowEx) в окне одной основной страницы...
Цитата:
Пример на картинке
Можно сделать нечто похожее... На первой кастомной странице, например, 3 кнопки, каждая из которых открывает новую кастомную страницу на той же позиции. Общее - на всех страницах одинаково, потому создастся эффект переключения как бы закладок на одной странице...
Можно переключать не страницы , а собственные окна (CreateWindowEx) в окне одной основной страницы...
Цитата:
Также надо "совершить" takeown.exe и icacls.exe над этими файлами и папками
nsExec::Exec 'takeown.exe /F $WINDIR\notepad.exe'
Pop $0
nsExec::Exec 'takeown.exe /F $SYSDIR\notepad.exe'
Pop $0
nsExec::Exec 'icacls.exe $WINDIR\notepad.exe /grant "$USERNAME":F'
Pop $0
nsExec::Exec 'icacls.exe $SYSDIR\notepad.exe /grant "$USERNAME":F'
Pop $0
ALL Есть ли вариант запустить внешний файл в ТОМ ЖЕ окне CMD из NSIS?
dialmak
Exec::, ExecDOS::, ExecWait::, NsExec:: . НО! NSIS это GUI программа, потому в любом случае консольная программа запустится в отдельной задаче, а запустить можно что угодно, только прописав правильный путь к бинарнику. Сам для этого NsExec использовал.
Exec::, ExecDOS::, ExecWait::, NsExec:: . НО! NSIS это GUI программа, потому в любом случае консольная программа запустится в отдельной задаче, а запустить можно что угодно, только прописав правильный путь к бинарнику. Сам для этого NsExec использовал.
Victor_VG
Цитата:
Имелось ввиду в отдельном окне видимо.
Не уверен. Можно обойти видимо через System::Call. Но я баран...
ExecDOS:: , NsExec:: не годятся - они скрывают окно.
Exec::, , ExecWait:: не годятся - они создают новое окно.
Добавлено:
Цитата:
Дык GUI можно скрыть, это не проблема.
Добавлено:
Не хочется Autoit-ом делать - там размр. Может акие-то ещё варианты есть. Нужно упаковать пару файлов и запустить в том же консольном окне. 7sfx - тоже отпал по той же причине, что и NSIS. Хотя пока роюсь..
Цитата:
потому в любом случае консольная программа запустится в отдельной задаче
Имелось ввиду в отдельном окне видимо.
Не уверен. Можно обойти видимо через System::Call. Но я баран...
ExecDOS:: , NsExec:: не годятся - они скрывают окно.
Exec::, , ExecWait:: не годятся - они создают новое окно.
Добавлено:
Цитата:
NSIS это GUI программа
Дык GUI можно скрыть, это не проблема.
Добавлено:
Не хочется Autoit-ом делать - там размр. Может акие-то ещё варианты есть. Нужно упаковать пару файлов и запустить в том же консольном окне. 7sfx - тоже отпал по той же причине, что и NSIS. Хотя пока роюсь..
dialmak
Именно в задаче т.к. GUI и консоль это независимые подсистемы ОС и потому обойти это невозможно. Сессия пользователя будет та же (если не применять приёмы типа Run As...), задачи разные. Если же стоит вопрос что имеется существующая сессия CMD и в ней надо что-то запустить, то это через API и получение её PID. Тут я с ходу решения не подскажу.
Именно в задаче т.к. GUI и консоль это независимые подсистемы ОС и потому обойти это невозможно. Сессия пользователя будет та же (если не применять приёмы типа Run As...), задачи разные. Если же стоит вопрос что имеется существующая сессия CMD и в ней надо что-то запустить, то это через API и получение её PID. Тут я с ходу решения не подскажу.
Цитата:
имеется существующая сессия CMD и в ней надо что-то запустить, то это через API
Да. Это нужный вариант. Как прогуглить? Чего вбивать нужно?
Victor_VG
Да там зарыться можно. Видимо придётся autoit-ом сделать...
Да там зарыться можно. Видимо придётся autoit-ом сделать...
dialmak
Там да, но это надёжный вариант т.к. если известен PID процесса можно сделать и всё остальное, в том числе и отдать ему команду, а так ОС просто запустит новую копию командного интерпретатора которая естественно выведет собственное окно.
Там да, но это надёжный вариант т.к. если известен PID процесса можно сделать и всё остальное, в том числе и отдать ему команду, а так ОС просто запустит новую копию командного интерпретатора которая естественно выведет собственное окно.
Цитата:
если известен PID процесса можно сделать и всё остальное, в том числе и отдать ему команду
Да там ничего не нужно ловить. Скомпилил как консольное приложение и усе.
dialmak
Цитата:
Ага, а все процессы в системе один единственный PID используют. Неверно, и потому нужно найти/знать желаемый.
Цитата:
Да там ничего не нужно ловить.
Ага, а все процессы в системе один единственный PID используют. Неверно, и потому нужно найти/знать желаемый.
dialmak
Батником извне управлять, и зачем это извращенство. Может проще изнутри?
Батником извне управлять, и зачем это извращенство. Может проще изнутри?
Цитата:
Видимо придётся autoit-ом сделать
Зачем тогда мучиться с NSIS? Ради экономии нескольких сотен KB?
Цитата:
Нужно упаковать пару файлов и запустить в том же консольном окне
А до этого то что в этом окне происходит?
820815
Цитата:
Эта задача откуда? Я не отыскал её на последних страницах. Но, по идее решается так -
через WinAPI получаем хендл нужного окна, по нему отыскиваем PID породившего его процесса и ему передаём команды, наблюдаем результат. Тут да, NSIS вообще не нужен т.к. задача решается стандартными языками программирования, к примеру ассемблером, C/C++/C#, Lua, PL/1, но не средствами инсталляторов.
Цитата:
Нужно упаковать пару файлов и запустить в том же консольном окне
Эта задача откуда? Я не отыскал её на последних страницах. Но, по идее решается так -
через WinAPI получаем хендл нужного окна, по нему отыскиваем PID породившего его процесса и ему передаём команды, наблюдаем результат. Тут да, NSIS вообще не нужен т.к. задача решается стандартными языками программирования, к примеру ассемблером, C/C++/C#, Lua, PL/1, но не средствами инсталляторов.
820815
Цитата:
Да.
Цитата:
Ничего. Открытое окно CMD.
Victor_VG
Цитата:
Это я писал выше..
Цитата:
В главном exe должны лежать несколько консольных exe и спецскриптов. При вызове главного exe с параметрами - происходит запуск консольных различных exe с другими параметрами.
Подобную задачу обычно решал с помощью nsis или 7sfx, но в данном случае это не катит, так как консольное exe должно показать результат в стандартный поток вывода и главный exe звершает работу и его можно вызвать с другими параметрами. А читать и перенаправлять вывод нежелательно.
Может сумбурно написал, но я не программер. Для уменьшения размера сейчас пытаюсь использовать PureBasic. Осталось понять как всунуть другие exe в его exe-шник... Теоретически это возможно видимо.
Добавлено:
В PureBasic всё оказалось просто. Проблема решена.
Цитата:
Ради экономии нескольких сотен KB?
Да.
Цитата:
А до этого то что в этом окне происходит?
Ничего. Открытое окно CMD.
Victor_VG
Цитата:
Эта задача откуда?
Это я писал выше..
Цитата:
задача решается стандартными языками программирования, к примеру ассемблером, C/C++/C#, Lua, PL/1, но не средствами инсталляторов.
В главном exe должны лежать несколько консольных exe и спецскриптов. При вызове главного exe с параметрами - происходит запуск консольных различных exe с другими параметрами.
Подобную задачу обычно решал с помощью nsis или 7sfx, но в данном случае это не катит, так как консольное exe должно показать результат в стандартный поток вывода и главный exe звершает работу и его можно вызвать с другими параметрами. А читать и перенаправлять вывод нежелательно.
Может сумбурно написал, но я не программер. Для уменьшения размера сейчас пытаюсь использовать PureBasic. Осталось понять как всунуть другие exe в его exe-шник... Теоретически это возможно видимо.
Добавлено:
В PureBasic всё оказалось просто. Проблема решена.
dialmak
Да, тут стоит подумать. С наскоку идей нет.
Да, тут стоит подумать. С наскоку идей нет.
Victor_VG
Цитата:
Можно использовать любой язык. Я использовал pureBaic. Exe-шники всунул в ресурсы(код ниже) и скомпилил как консольное приложение.
Код: DataSection
DN:
IncludeBinary "my.exe"
End_DN:
EndDataSection
CreateFile(0, "MY.EXE")
WriteData(0, ?DN, ?End_DN - ?DN)
CloseFile(0)
Цитата:
С наскоку идей нет
Можно использовать любой язык. Я использовал pureBaic. Exe-шники всунул в ресурсы(код ниже) и скомпилил как консольное приложение.
Код: DataSection
DN:
IncludeBinary "my.exe"
End_DN:
EndDataSection
CreateFile(0, "MY.EXE")
WriteData(0, ?DN, ?End_DN - ?DN)
CloseFile(0)
Дык вопрос не в языке программирования, а в том как именно должен работать алгоритм для решения данной задачи с минимальными затратами.
Victor_VG
Цитата:
Ну так и я об этом же. Незнаком с C/C++, поэтому выбрал PureBasic.
Цитата:
Полезное, что вынес из ситуации - на NSIS подобную задачу решить тяжело.
Цитата:
Дык вопрос не в языке программирования, а в том как именно должен работать алгоритм для решения данной задачи с минимальными затратами.
Ну так и я об этом же. Незнаком с C/C++, поэтому выбрал PureBasic.
Цитата:
Можно использовать любой язык.
Полезное, что вынес из ситуации - на NSIS подобную задачу решить тяжело.
dialmak
В данном случае я лично простого решения не вижу, а сложное чревато скрытыми проблемами коих разумнее избежать в зародыше.
В данном случае я лично простого решения не вижу, а сложное чревато скрытыми проблемами коих разумнее избежать в зародыше.
Всех приветствую!
Решил сделать в установщике закрытие программы при обновлении. Если программа запущена, она должна закрыться, после чего происходит обновление.
Использую:
ExecWait "$INSTDIR\tv.exe -close"
но программа выдаёт ошибку на процесс одной библиотеки DLL. Видимо он не успевает завершиться до обновления.
Как установить таймер после закрытия tv.exe, а лучше дождаться завершения процесса DLL?
Решил сделать в установщике закрытие программы при обновлении. Если программа запущена, она должна закрыться, после чего происходит обновление.
Использую:
ExecWait "$INSTDIR\tv.exe -close"
но программа выдаёт ошибку на процесс одной библиотеки DLL. Видимо он не успевает завершиться до обновления.
Как установить таймер после закрытия tv.exe, а лучше дождаться завершения процесса DLL?
megane68
А зачем так сложно!? ProcLib.nsh в ./Include, ставите плагин NsProcess и пользуйтесь из неё любым макросом ${TermProc} _PROCNAME _TXTFILE или ${TrmPrcc} _ProcName которые всё сделают и системную диагностику вдобавок расшифруют.
А зачем так сложно!? ProcLib.nsh в ./Include, ставите плагин NsProcess и пользуйтесь из неё любым макросом ${TermProc} _PROCNAME _TXTFILE или ${TrmPrcc} _ProcName которые всё сделают и системную диагностику вдобавок расшифруют.
Victor_VG
Да, я читал в хелпе про этот плагин.
Дело в том, что программа портативная и не хотелось бы убивать процесс этой DLL-ки, потому как он должен выключаться именно при закрытии программы tv.exe.
В данном случае, если три раза прописать ExecWait '"$INSTDIR\tv.exe" -close', то процесс успевает кильнуться, поэтому хотелось бы именно назначить время ожидания после закрытия tv.exe.
Да, я читал в хелпе про этот плагин.
Дело в том, что программа портативная и не хотелось бы убивать процесс этой DLL-ки, потому как он должен выключаться именно при закрытии программы tv.exe.
В данном случае, если три раза прописать ExecWait '"$INSTDIR\tv.exe" -close', то процесс успевает кильнуться, поэтому хотелось бы именно назначить время ожидания после закрытия tv.exe.
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
Предыдущая тема: The Bat!
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.