[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 13
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата kotkovets:



апи не надо не любить, а пользоваться, эти функции объявлены в "заголовках" дельфи..

в батниках я не спец, но обязательно нужно опредилить путь к makensis и полный путь к скрипту

${NSISDIR}\makensis.exe "путь к скрипту"

Вам пример привести на делфи или на nsis посредством апи?
[архив].: NSIS - все вопросы :.




Приведите , посмотрим
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

wolkow70, подключите хедер UAC.nsh к скрипту (он парсит функции, а не компилятор) и используете макросы из этого хедера.

Для юникодной версии NSIS берем плагин из папки U

Для ANSI версии NSIS берем плагин из папки A

Как определить юникод или анси, скомпильте:



Код:

Код: Выделить всё

!ifdef NSIS_UNICODE
   MessageBox MB_ICONINFORMATION|MB_OK "NSIS_UNICODE" IDOK
!else
   MessageBox MB_ICONINFORMATION|MB_OK "NSIS_ANSI" IDOK
!endif
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Скомпилил так:



OutFile "test.exe"

!include LogicLib.nsh

Section "test"

!ifdef NSIS_UNICODE

MessageBox MB_ICONINFORMATION|MB_OK "NSIS_UNICODE" IDOK

!else

MessageBox MB_ICONINFORMATION|MB_OK "NSIS_ANSI" IDOK

!endif

SectionEnd



Результат NSIS_ANSI
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

А на фига здесь цикл? WaitForSingleObject - и все!


Цитата Painkiller:



Мне нужно как-то запустить makensis
[архив].: NSIS - все вопросы :.




Так укажите полный путь к makensis! если вы правильно указали путь, но не указали командную строку или неправильно - makensis сразу завершается, с кодом возврата 1 . Пропишите полный путь к исполнителю и скрипту... или где то еще у вас косяк, проверьте у себя скрипт который я показал в качестве примера - уверяю вас все отработает как нужно.

или вы просто не вылазите из цикла... Изображение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Ваш пример не работает. Где тут ошибка? :



Код:

Код: Выделить всё

 function Exec(RunApp : string; cmdline : string) : bool;
var
    si : TStartupInfo;
    pi : TProcessInformation;
begin
    try
      ZeroMemory(@si,SizeOf(si));
      si.cb := SizeOf(si);
      si.dwFlags := STARTF_USESHOWWINDOW;
      si.wShowWindow := SW_SHOW; // SW_HIDE - ñêðûòûé çàïóñê
      Result := CreateProcess(PChar(RunApp),PChar(' ' + cmdline),nil, nil,False,0,nil,nil,si,pi);
	  WaitForSingleObject(pi.hProcess, INFINITE); // îæèäàåì çàâåðøåíèÿ ïðîöåññà
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    except
      Result := false;
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Exec('C:\Program Files\NSIS\makensis.exe','C:\myscript.nsi');
end;
end.

Пример на nsis работает Изображение
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Вы наверно в юникоде работаете... Изображение это для анси..
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата kotkovets:



Вы наверно в юникоде работаете... это для анси..
[архив].: NSIS - все вопросы :.




Значит нужно перекодировать в анси
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Могу привести еще один пример, функция для запуска exe с параметром и ожидание его завершения.


читать дальше »




Код:

Код: Выделить всё

function ExecAndWait(const FileName, Params: string; WindowState: Word): Longword;
var { by Pat Ritchey }
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  CmdLine: string;
begin
  CmdLine := '"' + FileName + '"' + Params;
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.dwFlags     := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := WindowState;
  if not CreateProcess(nil,
    PChar(CmdLine), // pointer to command line string
    nil, // pointer to process security attributes
    nil, // pointer to thread security attributes
    False, // handle inheritance flag
    CREATE_NEW_CONSOLE or // creation flags
    NORMAL_PRIORITY_CLASS,
    nil, //pointer to new environment block
    nil, // pointer to current directory name {PChar(ExtractFilePath(FileName)),}
    StartupInfo, // pointer to STARTUPINFO
    ProcessInfo) // pointer to PROCESS_INF
    then Result := WAIT_FAILED
  else
  begin
    while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do
    begin
      Application.ProcessMessages;
      Sleep(50);
    end;
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end;
end;
//Пример использования
procedure TForm1.Button1Click(Sender: TObject);
begin
    ExecAndWait( 'C:\Program Files\NSIS\makensis.exe', 'C:\myscript.nsi', SW_HIDE );
end;
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата Krinkels:



Могу привести еще один пример, функция для запуска exe с параметром и ожидание его завершения.

« скрыть
[архив].: NSIS - все вопросы :.




Эту функцию я тоже знаю и тоже использую иногда . И с ней не пашит. Дело тут не в функциях .
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

PS.

Так тоже не пашет.

Function: "ExecAppFile"

!insertmacro: UAC_AsUser_ExecShell

!insertmacro: macro "UAC_AsUser_ExecShell" requires 5 parameter(s), passed 4!

Error in script "D:\NSIS\kmplayer-new.nsi" on line 96 -- aborting creation process
Ответить

Вернуться в «Автоматическая установка приложений»