|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты 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 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Цитата Chudmin:
Вполне возможно, что команда извлечения 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 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить PM | Цитировать Цитата ErikPshat:
|
|
|
Отправлено: 20:14, 23-10-2018 | #122 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата AnastasiyaM:
|
|
|
Отправлено: 21:23, 23-10-2018 | #123 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Цитата AnastasiyaM:
@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
|
Профиль | Отправить PM | Цитировать ErikPshat, чего, кого?
Цитата ErikPshat:
Цитата ErikPshat:
Нужно: реализация на InnoSetup Pascal Scripting функции CreateProcessAsUser/CreateProcessWithLogon. |
||
|
Отправлено: 22:29, 23-10-2018 | #125 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Iska, ну я написал код батника, можно всё перенести в код Inno Setup.
А почему тогда, при создании нового пользователя, после запуска батника, требует ввод пароля? Потому что созданный пользователь является просто Гостем и для него всегда будет запршиваться пароль. |
|
Отправлено: 22:41, 23-10-2018 | #126 |
|
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата ErikPshat:
![]() |
|
|
Отправлено: 23:16, 23-10-2018 | #127 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать AnastasiyaM, ну так я что-то недогоняю. Я же вам и предложил код, который:
1. Создаёт нового пользователя с Именем и Паролем. 2. Настраивает пользователя, т.е. ставит галочку, что Пароль не временный, а "Срок действия пароля не ограничен". 3. Делает пользователя Админом и даёт права на выполнение действий без ввода пароля. Теперь вы можете от его имени запускать необходимые процессы, без запроса пароля. И команду ranas можете выполнять. |
|
Отправлено: 00:28, 24-10-2018 | #128 |
|
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать ErikPshat, нужен обязательно бесправный пользователь.
Цитата ErikPshat:
Я пока сделала такой костыль в секции [Code]
Exec(ExpandConstant('runas'), ' /user:MyUser cmd.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
![]() |
|
|
Отправлено: 01:17, 24-10-2018 | #129 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Скрипты 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 | |
|