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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Ответить
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 9]

Аватара для El Sanchez

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.3.0 [17.01.2015] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

Аватара для ErikPshat

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


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

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


Цитата Chudmin:
Нашёл я свою ошибку, Splash-заставка отработала, а вот taskkill нет. »
Ну попробуйте повесить taskkill на иконку заставки или на другие файлы, которые загружаются первыми.
Вполне возможно, что команда извлечения ExtractTemporaryFile действует принудительно, в обход стандартного функционала инсталлятора и поэтому флаги из секции [Files] не отрабатывают. По-моему так и есть, флаги там работают только при стандартных действиях инсталлятора, т.е. при нажатии кнопки Install на конечном этапе. А у вас до этого не доходит и вы вызываете Taskkill до запуска инсталлятора из секции [ Code ] программы.

Поэтому нужно искать другое решение, т.е. как-то вызывать taskkill из кода программы, либо подключать библиотеку taskkill.dll или KillProc.dll и вызывать его через [external 'KillProcByExeName@files:KillProc.dll stdcall], как недавно выкладывал код boss911
здесь: http://forum.oszone.net/thread-33414...essage_2836987
здесь: http://forum.oszone.net/thread-33414...ml#edit2836987
здесь: http://forum.oszone.net/thread-33414...ml#post2836987

Отправлено: 20:10, 23-10-2018 | #121



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Chudmin

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


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

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


Цитата ErikPshat:
Поэтому нужно искать другое решение, т.е. как-то вызывать taskkill из кода программы, либо подключать библиотеку taskkill.dll или KillProc.dll и вызывать его через [external 'KillProcByExeName@files:KillProc.dll stdcall], как недавно выкладывал код boss911 здесь: http://forum.oszone.net/thread-33414...essage_2836987 »
Да, буду думать-экспериментировать.

Отправлено: 20:14, 23-10-2018 | #122


Ветеран


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

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


Цитата AnastasiyaM:
Только bat файл запрашивает пароль нового пользователя, когда запускает что-то от его имени (без пароля отказывается работать). Есть ли способ, как ему его передать в инсталятор? »
Это Вам надо «местных» коллег, специалистов по InnoSetup Pascal Scripting, озадачить данным вопросом, дабы подсказали.

Отправлено: 21:23, 23-10-2018 | #123


Аватара для ErikPshat

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


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

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


Цитата AnastasiyaM:
Только bat файл запрашивает пароль нового пользователя, когда запускает что-то от его имени (без пароля отказывается работать). Есть ли способ, как ему его передать в инсталятор? что то вроде Filename: cmd.exe; parameters: "{app}\my.bat %pas"; ? »
Скорее всего созданный пользователь не является Администратором и не имеет прав. Вам нужно нового пользователя назначить Администратором компьютера. Может быть как-то так получится:
Код: Выделить весь код
@echo Добавление нового пользователя
@echo off
 set user_name=Vasia_Pupkin
 set user_passw=12345678
echo.
echo 1. Добавление нового пользователя 
 net user %user_name% %user_passw% /add /expires:never /fullname:%user_name%
echo.
echo 2. Обновление свойств пользователя
echo.
 wmic path UserAccount where "Name='%user_name%'" set PasswordExpires=false /nointeractive
echo.
echo 3. Добавление в группу "Администраторы" и удаление из "Пользователя"
 net localgroup "Администраторы" %user_name% /add
 net localgroup "Пользователи" %user_name% /delete
@pause

Последний раз редактировалось ErikPshat, 24-10-2018 в 00:18.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:09, 23-10-2018 | #124


Ветеран


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

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


ErikPshat, чего, кого?

Цитата ErikPshat:
Скорее всего созданный пользователь не является Администратором и не имеет прав. »
И не должен являться. Этого не требуется ни по условию техзадания, ни для реализации.

Цитата ErikPshat:
Вам нужно нового пользователя назначить Администратором компьютера. »
Не нужно. Совсем. И этого не требуется ни по условию техзадания, ни для реализации.

Нужно: реализация на InnoSetup Pascal Scripting функции CreateProcessAsUser/CreateProcessWithLogon.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:29, 23-10-2018 | #125


Аватара для ErikPshat

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


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

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


Iska, ну я написал код батника, можно всё перенести в код Inno Setup.
А почему тогда, при создании нового пользователя, после запуска батника, требует ввод пароля?
Потому что созданный пользователь является просто Гостем и для него всегда будет запршиваться пароль.

Отправлено: 22:41, 23-10-2018 | #126


Новый участник


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

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


Цитата ErikPshat:
Iska, ну я написал код батника, можно всё перенести в код Inno Setup.
А почему тогда, при создании нового пользователя, после запуска батника, требует ввод пароля?
Потому что созданный пользователь является просто Гостем и для него всегда будет запршиваться пароль. »
Iska прав, задача создать пользователя и прописать ему ключи в реестр. Но так как у нового пользователь нет профиля, пока в него никто не логинился, я пытаюсь запустить от его имени какой-то процесс. Пароль просит именно нового пользователя. Если создавать пользователя без пароля, то ranas команда вообще отказывается работать

Отправлено: 23:16, 23-10-2018 | #127


Аватара для ErikPshat

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


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

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


AnastasiyaM, ну так я что-то недогоняю. Я же вам и предложил код, который:

1. Создаёт нового пользователя с Именем и Паролем.
2. Настраивает пользователя, т.е. ставит галочку, что Пароль не временный, а "Срок действия пароля не ограничен".
3. Делает пользователя Админом и даёт права на выполнение действий без ввода пароля.

Теперь вы можете от его имени запускать необходимые процессы, без запроса пароля.
И команду ranas можете выполнять.

Отправлено: 00:28, 24-10-2018 | #128


Новый участник


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

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


ErikPshat, нужен обязательно бесправный пользователь.
Цитата ErikPshat:
3. Делает пользователя Админом и даёт права на выполнение действий без ввода пароля. »
Даже если он еще никогда не логинился? Я попробовала вставить Ваш код, он все равно пароль запросил и я пошла искать другие способы. Может что-то не так сделала..

Я пока сделала такой костыль в секции
Код: Выделить весь код
[Code]
Exec(ExpandConstant('runas'), ' /user:MyUser cmd.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
теперь во время установки сообщение командной строки с запросом пароля появляется на экране. Не идеально, но работает

Отправлено: 01:17, 24-10-2018 | #129


Аватара для El Sanchez

Ветеран


Contributor


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

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


AnastasiyaM, вам нужно создавать пользователя уже с паролем, иначе на первом же логоне система скажет ни-ни, потом создать профиль и получить SID. Вот пример без автологона и с требованием пароля при первом входе. Пароль и прочие настройки вам все равно придется в учетке пользователя делать.
Скрытый текст

Код: Выделить весь код
[Registry]
#define UserName "Visitor"
Root: HKU; Subkey: {code:GetUserSid|{#UserName}}\Software\Microsoft\Windows\CurrentVersion\Run; ValueName: {#MyAppExeName}; ValueType: string; ValueData: {app}\{#MyAppExeName}; Check: CheckCreateUser('{#UserName}')

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  ERROR_SUCCESS = 0;
  ERROR_INSUFFICIENT_BUFFER = 122;
  LOGON32_LOGON_INTERACTIVE = 2;
  LOGON32_PROVIDER_DEFAULT = 0;

type
  TProfileInfo = record
    dwSize: DWORD;
    dwFlags: DWORD;
    lpUserName: string;
    lpProfilePath: string;
    lpDefaultPath: string;
    lpServerName: string;
    lpPolicyPath: string;
    hProfile: THandle;
  end;

function LookupAccountName(lpSystemName, lpAccountName: string;
  var Sid: Byte; var cbSid: DWORD; ReferencedDomainName: string;
  var cbReferencedDomainName: DWORD; var peUse: LongWord): BOOL; external 'LookupAccountName{#A}@advapi32.dll stdcall';
function ConvertSidToStringSid(var Sid: Byte; var StringSid: LongWord): BOOL; external 'ConvertSidToStringSid{#A}@advapi32.dll stdcall';
function LogonUser(lpszUsername, lpszDomain, lpszPassword: string;
  dwLogonType, dwLogonProvider: DWORD; var phToken: THandle): BOOL; external 'LogonUser{#A}@advapi32.dll stdcall';
function LoadUserProfile(hToken: THandle; var lpProfileInfo: TProfileInfo): BOOL; external 'LoadUserProfile{#A}@userenv.dll stdcall';
function UnloadUserProfile(hToken, hProfile: THandle): BOOL; external 'UnloadUserProfile@userenv.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

function CheckCreateUser(const UserName: string): Boolean;
var
  TempPassword: string;
  UserToken: THandle;
  ProfileInfo: TProfileInfo;
  ResultCode: Integer;
begin
  Result := False;
  try
    { Create user account. }
    TempPassword := 'PqYDLMAD';
    if not Exec(ExpandConstant('{cmd}'), Format('/c net user "%s" "%s" /add /expires:never', [UserName, TempPassword]), '', SW_HIDE, ewWaitUntilTerminated, ResultCode) or
      (ResultCode <> ERROR_SUCCESS) then Exit;

    { Create user profile. }
    if not LogonUser(UserName, '.', TempPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, UserToken) then
      RaiseException(SysErrorMessage(DLLGetLastError));
    ProfileInfo.dwSize := SizeOf(ProfileInfo);
    ProfileInfo.lpUserName := UserName;
    if not LoadUserProfile(UserToken, ProfileInfo) and
      not UnloadUserProfile(UserToken, ProfileInfo.hProfile) then
      RaiseException(SysErrorMessage(DLLGetLastError));

    { Change user account. }
    if not Exec(ExpandConstant('{cmd}'), Format('/c net user "%s" "" /logonpasswordchg:yes', [UserName]), '', SW_HIDE, ewWaitUntilTerminated, ResultCode) or
      (ResultCode <> ERROR_SUCCESS) then Exit;

    Result := True;
  except
    ShowExceptionMessage;
  finally
    if UserToken <> 0 then
      CloseHandle(UserToken);
  end;
end;

function GetUserSid(const UserName: string): string;
var
  Sid: array of Byte;
  DomainName: string;
  SidSize, DomainNameSize: DWORD;
  Buffer: LongWord;
begin
  Result := '';
  try
    SetArrayLength(Sid, 1);
    if not LookupAccountName('', UserName, Sid[0], SidSize, '', DomainNameSize, Buffer) and
      BOOL(DLLGetLastError <> ERROR_INSUFFICIENT_BUFFER) then Exit;
    SetArrayLength(Sid, SidSize);
    DomainName := StringOfChar(#0, DomainNameSize - 1);
    if not LookupAccountName('', UserName, Sid[0], SidSize, DomainName, DomainNameSize, Buffer) and
      BOOL(DLLGetLastError <> ERROR_SUCCESS) then
      RaiseException(SysErrorMessage(DLLGetLastError));
    if not ConvertSidToStringSid(Sid[0], Buffer) then
      RaiseException(SysErrorMessage(DLLGetLastError));
    Result := CastIntegerToString(Buffer);
  except
    ShowExceptionMessage;
  finally
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 24-10-2018 | #130



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход