PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [36] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

K.A.V.
05-11-2013, 10:15
Можно воспользоваться ExecShell "open" »
Можно, а нужно ли? Если у пользователя будут сбиты ассоциации, то команда не сработает...Чем вам не угодил nsExec?

но тогда как решить проблему невозможности закрытия окна cmd до завершения процесса? »
Скрыть окно? FindWindow + ShowWindow


ShowWindow $HWND 0
; $HWND - дескриптор cmd окна, узнаётся через FindWindow
; 0 - скрыть, 1 - показать окно


Описание команды FindWindow есть в справочнике

Salmo
05-11-2013, 12:06
Добрый день. Как отключить функцию перетаскивания для окна инсталлятора?

kotkovets
05-11-2013, 14:49
но тогда как решить проблему невозможности закрытия окна cmd до завершения процесса? »
Я себе делаю так, запуск скрытно все, что можно, с ожиданием:
Outfile ostart_.exe

!define hideexec "!insertmacro func_hideexec"
!macro func_hideexec exehide
System::Store S
System::Alloc 72
Pop $2
System::Call "*$2(i72,i,i,i,i,i,i,i,i,i,i,i3)"
System::Call "*(i,i,i,i)i.r3"
System::Call 'kernel32::CreateProcess(i0,t"${exehide}",i0,i0,i0,i0,i0,i0,ir2,ir3)i.r4'
System::Call "*$3(i.r1)"
System::Call "kernel32::WaitForSingleObject(ir1, i-1)"
System::Call "kernel32::CloseHandle(ir4)"
System::Free $2
System::Free $3
System::Store L
!macroend

Section
${hideexec} "C:\123.bat"
SectionEnd
В батнике можно прописать в конце exit или прибивать в конце cmd

Limonica
05-11-2013, 16:43
kotkovets, http://forum.oszone.net/post-2247556-700.html

MKN
05-11-2013, 17:36
Как отключить функцию перетаскивания для окна инсталлятора? »
Здесь есть решение :
http://forum.codenet.ru/q72348/Как+запретить+перемещение+окна+мышкой%3F?s=0#answer_379693
Но не для NSIS...

kotkovets
05-11-2013, 19:17
Тестировался нижеследущий код XP Professional - все ок, XP Home - установка не проходит, в чем может быть проблема, непонятно, буду благодарен если посмотрите...
Limonica че там тестировать в кастрированом Home, есть утилика DPInst (http://www.filecrop.com/DPInst.exe.html)
для установки драйверов.. изучайте ключи запуска - в сети туча примеров - DPInst /?
Как отключить функцию перетаскивания для окна инсталлятора »
скорее штатными средствами врятли легко реализуемо..

Salmo
05-11-2013, 22:43
Здесь есть решение :
Но не для NSIS... » Спасибо, но...

скорее штатными средствами врятли легко реализуемо.. »

Первый вопрос задал, на который не получил ответа: "писалось раньше" :) , а жаль...

Limonica
06-11-2013, 01:30
kotkovets, задача установить драйвер без посторонних ехе, в исходниках devcon указанно:
cmdUpdate

This command shows how to use UpdateDriverForPlugAndPlayDevices to update the driver for all devices to a specific driver. Normally INSTALLFLAG_FORCE would not be specified allowing UpdateDriverForPlugAndPlayDevices to determine if there is a better match already known. It's specified in DevCon to allow DevCon to be used more effectively as a debugging/testing tool. This cannot be done on a remote machine or in the context of Wow64.

cmdInstall

A variation of cmdUpdate to install a driver when there is no associated hardware. It creates a new root-enumerated device instance and associates it with a made up hardware ID specified on the command line (which should correspond to a hardware ID in the INF). This cannot be done on a remote machine or in the context of Wow64.

Такое ощущение что в скрипте реализованно именно обновление уже установленных устройст, а вовсе не в кастрации дело...


http://code.msdn.microsoft.com/windowshardware/DevCon-Sample-4e95d71c

MKN
06-11-2013, 08:55
Первый вопрос задал, на который не получил ответа: "писалось раньше" »
Ответ то есть. Осталась самая "малость" - интерпретировать его в NSIS... :) Это мутная работа для программистов, причём цель весьма сомнительной полезности...
И в сети ранее уже "писалось" :) по поводу перетаскивания - должно перестать действовать, если удалить заголовок окна. Но есть "но" - этот способ работает не на всех окнах и по сути не оч корректный... Пробуй...

Limonica,
Для установки драйверов для одной не новой программы, есть хедер... Кстати код похож, на тот, что и у kotkovets
Если ещё есть интерес , выложу. Хотя DPInst - лучший вариант.

YoraG
06-11-2013, 10:58
Как переименовать файл ffg.exe в ffg_old.exe перед установкой
Пишу

Section # "Файлы программы"
...
IfFileExists "$INSTDIR\ffg.exe" 0 +2
Rename $INSTDIR\ffg.exe $INSTDIR\ffg_old.exe
...
но выходит сначала устанавливает а потом переименовывает

Подскажите куда нужно поместить этот код

alexfinik
06-11-2013, 13:55
YoraG, А смысл? Сформулируйте цель. Что мешает сделать файл сразу ffg_old.exe?
Могу предложить создать некоторый файл, в который будет класться информация с некоторым индексом i, который будет каждый раз меняться при запуске файла.
Ну т.е. есть файл index.ini. При первом запуске его нет и он создается, после чего туда записывается цифра 1. Содержимое строки падает в переменную $R0. Файл в конце переименовывается в Rename $INSTDIR\ffg.exe $INSTDIR\ffg_old($R0).exe

Limonica
06-11-2013, 14:40
MKN, выложи пожалуйста, интересно будет посмотреть...

Salmo
06-11-2013, 14:52
по поводу перетаскивания - должно перестать действовать, если удалить заголовок окна. Но есть "но" - этот способ работает не на всех окнах и по сути не оч корректный... Пробуй... »
Добрый день. Эта мысль мне пришла в голову до вашего комментария, видимо в ней (в голове) еще есть место :) и уже реализована в коде ( спасибо K.A.V.) Мне нужна эта возможность не для всех окон, а только для инсталлятора, так что о корректности можно не думать... Осталось опробовать. Спасибо за отклик!

MKN
06-11-2013, 15:15
и уже реализована в коде ( спасибо K.A.V.) »
Выложи пожалуйста это решение для всеобщего обозрения.

Хедер установки драйверов :

K.A.V.
06-11-2013, 15:29
Выложи пожалуйста это решение для всеобщего обозрения. »
Там нет ничего сверхъестественного...
Открываешь EXE с ресурсами диалогов (modern.exe), переходишь в диалог "105", удаляешь стили окна: WS_CAPTION и WS_SYSMENU
По вкусу, можно добавить другие стили окна, для придания некой формы, например добавить WS_THICKFRAME для толстой рамки или WS_BORDER с тонкой...Инфы в гугле много по стилям окон WS_*

MKN
06-11-2013, 15:38
K.A.V.,
Нее... Это как то в лоб и не по NSIS_совски... :) А ежели кодом, то это как ?

K.A.V.
06-11-2013, 15:44
не по NSIS_совски... »
Некоторые коды, которые мы уже здесь разбирали тоже "не по NSIS_совски", но всё же ими пользуются

Скажи мне, в чем разница, что ты вырежишь стили окон из EXE, что ты вызовишь API функцию, которая это сделает при инициализации граф. интерфейса?
Разве что усложнишь себе задачу

MKN
06-11-2013, 15:51
Скажи мне, в чем разница, что ты вырежишь стили окон из EXE, что ты вызовишь API функцию, которая это сделает при инициализации граф. интерфейса? »
Управление кодом и редактиование ресурсов - совершенно разные методы, пусть и приводящие иногда к одному результату.
Редактирование ресурсов посредством кода - это другое дело. Метод прямого редактирования ресурсов - явно не программистский, а какой то любительский что ли... :) Конечно, большинство нас здесь, по сути, любители, но всё же... :)

K.A.V.
06-11-2013, 16:00
Метод прямого редактирования ресурсов - явно не программистский, а какой то любительский что ли... »
Ну, на это я могу сказать только то, что лично в этой теме, как ты здесь заметил - великих программистов нет (разве что Вячеслав :) ), которые бы по каждому запросу кодеров NSIS рвались бы и писали для них мегакоды, да и зачем это? Если есть более быстрый способ, тем более приводящий к одному результату.
А если вам предлагают решение и вы уже выбираете, нравится вам или нет - дело ваше
Я, например, не программист и не знаю ничего, кроме NSIS. Да, могу писать плагины для NSIS мелкой функциональности с простенькими командами, поэтому лично для меня проще дать решение, которым бы я сам воспользовался. Да, способ любительский, но я и никогда здесь не говорил, что я программист и буду давать мегакоды с плагином system (которым не пользуюсь, мне проще dll написать). Я самоучка... :)

А если ты хочешь "кодом", то гугли по функциям API, которые устанавливают стиль окна, например SetWindowLongPtr, этой функцией в своём плагине я удалял кнопки "скрыть, развернуть" и оставлял лишь кнопку "Закрыть" в шапке окна.

Limonica
06-11-2013, 16:06
MKN, тоже на Home Edition не работает, но спасибо.




© OSzone.net 2001-2012