- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从 Windows 服务运行命令行应用程序,以另一个 Windows 用户身份执行它(通过提供域\用户
和密码
)。
我以这种方式将 Windows API CreateProcessWithLogonW()
包装在我自己的 RunAppAsAnotherWindowsUser()
函数中:
function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword: PWideChar;
dwLogonFlags: DWORD;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
lpStartupInfo: PStartupInfoW;
lpProcessInformation: PProcessInformation
): BOOL; stdcall; external 'advapi32.dll';
function RunAppAsAnotherWindowsUser(const User, Domain, PW, Application, CmdLineParams: WideString): LongWord;
const
LOGON_WITH_PROFILE = $00000001;
implementation
function RunAppAsAnotherWindowsUser(const User, Domain, PW, Application, CmdLineParams: WideString): LongWord;
var
si : TStartupInfoW;
pif : TProcessInformation;
begin
ZeroMemory(@si, sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
SetLastError(0);
CreateProcessWithLogonW(PWideChar(User), PWideChar(Domain), PWideChar(PW),
LOGON_WITH_PROFILE, nil, PWideChar(Application+' '+CmdLineParams),
CREATE_DEFAULT_ERROR_MODE, nil, nil, @si, @pif);
Result := GetLastError;
end;
上面是adapted from here .
当我在为测试而创建的 Win32 VCL 应用程序中使用 RunAppAsAnotherWindowsUser ()
时,它工作正常。当我从 Windows 服务调用它时,它不起作用。
我读到this page如advised here ,但就我而言,我没有交互过程,因为我的命令行应用程序仅执行数据库查询并写入临时文件。
我尝试以本地系统而不是域管理员的身份运行该服务,但行为是相同的。
该服务是作为服务构建的 IntraWeb(VCL for the Web)应用程序。与 exe 一样构建的应用程序运行良好。我写这篇文章只是为了解释我工作的背景。
您能帮我找出问题所在吗?
最佳答案
从服务中,您应该在用户 session 中启动该进程(在物理 PC 上,通常是控制台 session )。自 Windows Vista 以来就是这种情况:
Services have always run in session 0. Before Windows Vista, the first user to log on was also assigned to session 0. Now, session 0 is reserved exclusively for services and other applications not associated with an interactive user session. (The first user to log on is connected to session 1, the second user to log on is connected to session 2, and so on.) Session 0 does not support processes that interact with the user.
参见here我的博客上有一个非常基本的例子,使用 Jedi Apilib .
来自此博客:
uses JwaWinbase, JwaWtsApi32;
var hToken: THandle;
si: _STARTUPINFOA;
pi: _PROCESS_INFORMATION;
var Ret: Cardinal;
sTitle: string;
sMsg: string;
begin
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
si.lpDesktop := nil;
if WTSQueryUserToken(WtsGetActiveConsoleSessionID, hToken) then
begin
if CreateProcessAsUser(hToken, nil, 'notepad.exe', nil, nil, False,
0, nil, nil, si, pi) then
begin
// Do some stuff
end;
end;
end;
关于delphi - 如何从服务应用程序使用 CreateProcessWithLogonW?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872364/
我需要从 Windows 服务运行命令行应用程序,以另一个 Windows 用户身份执行它(通过提供域\用户 和密码)。 我以这种方式将 Windows API CreateProcessWithLo
我正在尝试启动一个程序,该程序以另一个用户的身份在 Windows 7 系统上使用 Win32 函数 CreateProcessWithLogon 启动另一个程序,但它返回错误 120,表示不支持的函
我有一个 Windows 服务(在 WinXP SP2 下),在 LocalSystem 帐户下运行,它使用 CreateProcessWithLogonW 启动进程。为了清理子进程,我尝试使用作业对
我正在使用来自 http://www.pinvoke.net/default.aspx/advapi32.createprocesswithlogonw 的代码.如何从标准输出中获取字符串形式的输出?
我有一段代码 if(!CreateProcessWithLogonW( szUserName, NULL, szPassword, LOGON_WITH_PROFILE
在测试框架中,进程 A 必须使用 CreateProcessWithLogonW API 在不同的用户凭据(例如,_limited_user)下启动进程 B。 lpStartupInfo->lpDes
我有一个 Windows 可执行文件,它是通过使用一组指定的用户详细信息调用 CreateProcessWithLogonW() 从服务中启动的。 这工作正常,并且该过程按预期开始。但是,当此进程尝试
大家好,我是编程新手。请有人帮助我。 我正在尝试从服务启动进程。我需要通过提示用户输入管理员凭据来启动新流程。 我正在尝试使用 CreateProcessWithLogonW()。 我使用的功能是否正
我写了一个程序,它应该像 RunAs 一样工作。它工作正常,但我有一个问题。如果我想运行例如 compmgmt.msc,那么我应该运行 mmc.exe 和 compmgmt.msc 作为它的参数。计算
我写了一个小函数,可以加载一个的多个实例使用 CreateProcessWithLogonW 可执行 伪代码: for ( i=0;i<100;i++) { sprintf(user,"user%
当我使用 CreateProcess() 创建一个进程时,我可以毫无问题地从它的 stdOut 中读取。为此,我创建了管道并通过 STARTUPINFO 将它们传递给进程。稍后我可以使用 ReadFi
所以我一直在开发一个小应用程序,它在某些时候以另一个用户的身份运行一个应用程序,我用 C 编写它并使用 MinGW GCC 编译器来编译和链接它。我的问题是,每当我尝试使用 WINAPI 函数 Cre
我正在使用以下代码创建具有其他用户安全权限的进程: CreateProcessWithLogonW( Username, Domain ? Domain : L".", Pas
我是一名优秀的程序员,十分优秀!