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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2006, 10:31   #1
EraM
Новичок
Джуниор
 
Регистрация: 19.12.2006
Сообщений: 1
По умолчанию Запуск программы от имени другого пользователя...

Доброго времени суток.

Проблемка: Есть учётка ограниченная и есть прога которая общаеться с реестром. Как средствами Delphi запустить прогу от имени другого пользователя, если логин и пароль известны.
EraM вне форума Ответить с цитированием
Старый 21.12.2006, 15:48   #2
СТРАННИК
Пользователь
 
Аватар для СТРАННИК
 
Регистрация: 20.12.2006
Сообщений: 43
По умолчанию

Попробуй так.

function CreateProcessWithLogonW(user:pwidec har; domain:pwidechar;
passw:pwidechar; flags: DWORD; lpApplicationName: PwideChar; lpCommandLine: PwideChar;
dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;external 'advapi32.dll' name 'CreateProcessWithLogonW';
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
si: TSTARTUPINFO;
pif: PROCESS_INFORMATION;
begin
si.cb := SizeOf(tstartupinfo);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWDEFAULT;
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
CreateProcessWithLogonW('Login', nil, 'Password', 0,
nil, 'notepad.exe {или путь к твоей проге}',0, nil, nil, si, pif);
end;

Удачи.
Если бы я был на столько умён, чтобы ответить на все вопросы самостоятельно, я бы не спрашивал...

Последний раз редактировалось СТРАННИК; 21.12.2006 в 15:54.
СТРАННИК вне форума Ответить с цитированием
Старый 03.09.2008, 11:29   #3
mixael
 
Регистрация: 11.01.2008
Сообщений: 7
По умолчанию

Если делать через CreateProcessWithLogonW, если запускать вручную, то все норм, программа запускается от другого пользователя, а если запускать через WinExec, или автозапуск, то пишет, что файл не найден!
В чем проблема?
mixael вне форума Ответить с цитированием
Старый 12.05.2011, 11:07   #4
KiL0z
Пользователь
 
Регистрация: 17.05.2010
Сообщений: 35
Вопрос Как запрос UAC выдать, когда это нужно?

А если логин и пароль не известны, но нужно под Win7 запустить с правами админа (что бы всплыло окно запроса UAC), то как это сделать?
Манифест не катит - запрос UAC будет при каждом запуске программы, а нужно только при выполнении определенных действий: нужно что-то в реестр записать или папку программ или службу запустить - запустил себя с админскими правами, сказал что делать, сделал с правами админа, закрыл привилегированную копию, продолжил работу.

Типа такого UAC (в зависимости от настроек безопасности):
или


-------------------------------------------------------------------------


Так эта проблема решилась, после MSDN - Redesign for UAC Compatibility (UAC) была написана функция:
Код:
function RunAsAdmin(HWND: hWnd; lpFile,lpParameters: String): Boolean;
var
 sei: SHELLEXECUTEINFO;
begin
  try
    ZeroMemory ( @sei, SizeOf(sei) );

    sei.cbSize := SizeOf(SHELLEXECUTEINFOW);
    sei.Wnd := hWnd;
    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
    sei.lpVerb := 'runas';
    sei.lpFile := PWideChar(IncludeTrailingPathDelimiter(lpFile));
    sei.lpParameters := PWideChar(lpParameters);
    sei.nShow := SW_SHOWNORMAL;

    if ( not ShellExecuteEx ( @sei ) ) then begin
      //ShowMessage( 'Error: ShellExecuteEx failed ' + IntToStr(GetLastError) );
      Result := False;
      Exit;
    end;
    Result := True;
  except
    else Result := False;
  end;
end;
Теперь стоит вопрос: как скрыть сообщение выдаваемое службой при её установке или удалении (т.е. при запуске её exe-шника с ключом /install или /uninstall соответственно) ?


-------------------------------------------------------------------------


Нашел - нужно ещё ключик добавить: /SILENT

Последний раз редактировалось KiL0z; 12.05.2011 в 15:13. Причина: решение проблемы
KiL0z вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск *.exe из программы Djaconda Паскаль, Turbo Pascal, PascalABC.NET 22 01.03.2012 00:27
Работа программы с БД с ограниченной учетной записью пользователя Windows Стас БД в Delphi 3 11.12.2009 14:35
Получение прав другого пользователя Квэнди Win Api 14 28.07.2008 14:49
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Запуск программы Egych Общие вопросы Delphi 4 04.05.2007 09:46