Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.10.2013, 10:35   #1
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 248
По умолчанию запуск от имени администратора зная логин и пароль

как осуществить все это?!
чтобы стартовала программа сразу же от админа. зная логин и пароль?!
AppData вне форума
Старый 09.10.2013, 10:36   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

runas + help
eval вне форума
Старый 09.10.2013, 10:43   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Используйте функции: CreateProcessWithLogon, CreateProcessAsUser
Человек_Борща вне форума
Старый 09.10.2013, 10:52   #4
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 248
По умолчанию

пример не помешал бы

Код:
procedure tform1.button1click(sender: tobject);
var a:string;
begin
a:=runas('login', 'password', 'c:\file.exe');
if a<>'success' then showmessage(a);
end;
бред. мне нужно сразу же при запуске чтобы он запускал

Код:
unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfMain = class(TForm)
   Button: TButton;
   procedure ButtonClick(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation
uses
 HSAdvApi;

{$R *.dfm}

procedure TfMain.ButtonClick(Sender: TObject);
begin
 MyCreateProcess();
end;

procedure TfMain.MyCreateProcess;
const
 UserName : WideString = "TESTUSER";
 Password : WideString = "testuser";
 ConstCommandLine : String = "CMD.EXE";
 Title : WideString = "Test process";
 Domain : WideString = "WORKGROUP";
var
 MyStartupInfo : STARTUPINFO;
 ProcessInfo : PROCESS_INFORMATION;
 CommandLine : array[0..512] of WideChar;
begin
 FillChar(MyStartupInfo, SizeOf(MyStartupInfo), 0);
 MyStartupInfo.cb := SizeOf(MyStartupInfo);
 StringToWideChar(ConstCommandLine, CommandLine,
    Sizeof(CommandLine) div SizeOf(WideChar));
 MyStartupInfo.lpTitle := PWideChar(Title);
 if not CreateProcessWithLogonW (PWideChar(UserName), PWideChar(Domain),
     PWideChar(Password), LOGON_WITH_PROFILE, nil,
     CommandLine, 0, nil, nil, @MyStartupInfo, @ProcessInfo) then
   RaiseLastWin32Error()
 else begin
   CloseHandle(ProcessInfo.hProcess);
   CloseHandle(ProcessInfo.hThread);
 end;
end;

end.


unit HSAdvApi;

interface
uses
 Windows;

function CreateProcessWithLogonW (const lpUsername : PWideChar;
 const lpDomain : PWideChar; const lpPassword : PWideChar;
 dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
 lpCommandLine : PWideChar; dwCreationFlags : DWORD;
 lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
 lpStartupInfo : PStartupInfo;
 lpProcessInfo : PProcessInformation) : Boolean; stdcall;

const
 LOGON_WITH_PROFILE = $00000001;
 LOGON_NETCREDENTIALS_ONLY = $00000002;
 LOGON_ZERO_PASSWORD_BUFFER = $80000000;

implementation
uses
 SysUtils;

{ ADVAPI32.DLL functions }
type
 TCreateProcessWithLogonW =
   function (const lpUsername : PWideChar;
 const lpDomain : PWideChar; const lpPassword : PWideChar;
 dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
 lpCommandLine : PWideChar; dwCreationFlags : DWORD;
 lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
 lpStartupInfo : PStartupInfo;
 lpProcessInfo : PProcessInformation) : Boolean; stdcall;

const
 DllName = "advapi32.dll";

var
 DllHandle : THandle;
 _CreateProcessWithLogonW : TCreateProcessWithLogonW;

function InitLib : Boolean;
begin
 if DllHandle = 0 then
   if Win32Platform = VER_PLATFORM_WIN32_NT then begin
     DllHandle := LoadLibrary(DllName);
     if DllHandle <> 0 then begin
       @_CreateProcessWithLogonW := GetProcAddress(DllHandle,
         "CreateProcessWithLogonW");
     end;
   end;
 Result := (DllHandle <> 0);
end;

function NotImplementedBool : Boolean;
begin
 SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
 Result := false;
end;

function CreateProcessWithLogonW (const lpUsername : PWideChar;
 const lpDomain : PWideChar; const lpPassword : PWideChar;
 dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
 lpCommandLine : PWideChar; dwCreationFlags : DWORD;
 lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
 lpStartupInfo : PStartupInfo;
 lpProcessInfo : PProcessInformation) : Boolean; stdcall;
begin
 if InitLib and Assigned(_CreateProcessWithLogonW) then
   Result := _CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword,
     dwLogonFlags, lpApplicationName, lpCommandLine, dwCreationFlags,
     lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInfo)
 else
   Result := NotImplementedBool;
end;

initialization
finalization
 if DllHandle <> 0 then
   FreeLibrary(DllHandle);
end.
что вводить в

UserName : WideString = 'TESTUSER';
Password : WideString = 'testuser';
ConstCommandLine : String = 'CMD.EXE';
Title : WideString = 'Test process';
Domain : WideString = 'WORKGROUP';

чтобы запустилась сразу моя программа под админом!

Последний раз редактировалось AppData; 09.10.2013 в 11:06.
AppData вне форума
Старый 09.10.2013, 11:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дык, Вы уже почти всё сами нашли!

Цитата:
Код:
function CreateProcessWithLogonW (const lpUsername : PWideChar;
 const lpDomain : PWideChar; const lpPassword : PWideChar;
 dwLogonFlags
lpUsername - имя пользователя
lpDomain - имя домена
lpPassword - пароль пользователя
dwLogonFlags - флаги (например, LOGON_WITH_PROFILE )
lpCommandLine - командная строка для запуска


я когда-то игрался.

взял вот такой код:
Код:
function NewStartInteractiveClientProcess(Username, Domain,
   Password, CommandLine: WideString): Boolean;
var
   pi: PROCESS_INFORMATION;
   si: STARTUPINFOW;
   wUSerName,
   wDomain,
   wPassword, wCommandLine : PWideChar;
begin
   Result:= False;
   wUsername := PWideChar(Username);
   wDomain := PWideChar(Domain);
   wPassword := PWideChar(Password);
   wCommandLine := PWideChar(CommandLine);
   try
     ZeroMemory(@si, SizeOf(si));
     si.cb:= SizeOf(si);
     si.lpDesktop:= nil; // для CreateProcessWithLogonW

     Result := CreateProcessWithLogonW(wUsername, wDomain,
       wPassword, LOGON_WITH_PROFILE,
       wCommandLine, nil, 0, nil, nil, si, pi);




   finally
   end;
end;
и вызываю его так(консольное приложение):

Код:
if Not NewStartInteractiveClientProcess(
        'Adminko','Domen','PaSsW0rD', 'notepad.exe') then WriteLn('Load Error');

Последний раз редактировалось Serge_Bliznykov; 09.10.2013 в 11:21.
Serge_Bliznykov вне форума
Старый 09.10.2013, 11:30   #6
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 248
По умолчанию

это я знаю. у меня вопрос не как запустить Другую программу с помощью прав админа а свою. сразу же. при старте автозапуска.
AppData вне форума
Старый 09.10.2013, 11:34   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно в планировщике настроить запуск проги при запуске винды и соответствующие права задать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 09.10.2013, 11:39   #8
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 248
По умолчанию

программа запускается и закрывается. как мне сделать именно так чтобы только когда ее запускают. админские права подгружаются.
AppData вне форума
Старый 09.10.2013, 11:44   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Создаете батник и в нем пишите runas ...запускаете не ехе а батник
Можно еще и манифест расписать, но тогда надо и система соответствующая. чтобы не ниже висты и уак врублен.
вот тут еще какойто способ есть http://www.exampledb.com/run-delphi-...or-windows.htm

А ваще зачем вам права админа на всю прогу? может можно обойтись малым потоком?
eval вне форума
Старый 09.10.2013, 12:01   #10
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 248
По умолчанию

чтобы сделать изменение в рестре нужны права админа.
AppData вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск процессов от имени администратора D][mon C# (си шарп) 0 14.01.2012 23:12
Запуск программы от имени администратора не зная пароль digital-stream Операционные системы общие вопросы 0 21.11.2011 22:02
Запуск от имени администратора DEV C++ Илларион Общие вопросы C/C++ 2 29.08.2011 06:55
Запуск функции от имени администратора s@ngre Win Api 4 12.04.2011 16:55
Запуск приложения от имени Администратора NoName_emaNoN Общие вопросы Delphi 16 15.07.2010 01:09