我目前正在编写一个使用低级鼠标钩子的应用程序。因为我必须使用具有管理员权限的系统启动应用程序,所以我想创建一个服务(请参阅此处:Is this a practical use of a service?)。 现在我刚刚发现服务无法使用钩子鼠标钩子。所以我需要一个新概念,但我真的不知道从哪里开始。我已经尝试过一个简单的过程,但我无法使用任务调度程序在系统启动时以管理员身份运行它。
那么建议使用什么?我还应该使用Windows服务来启动进程吗?这不是有点矫枉过正吗?
编辑:我刚刚尝试启动我的进程来执行服务的挂钩。该过程开始但看起来,它的行为与简单的服务行为相同。我可以安装钩子,但不会调用回调。 我正在使用此代码开始此过程:STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (!CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
std::wstring msg(L"Could not start \"");
msg.append(path);
msg.append(L"\". CreateProcess");
WriteErrorLogEntry((PWSTR)msg.c_str());
return;
}
如何解决我的问题?该过程必须以管理员权限运行,但需要另一个上下文?
答案 0 :(得分:0)
我的猜测是鼠标输入是每个会话,所以我猜你没有得到你想要的行为,因为你的进程没有在你想要的WindowsStation中运行。
答案 1 :(得分:-1)
我认为您可以使用任务计划程序启动具有管理员权限的程序。
这是一个展示如何创建以管理员权限运行但没有UAC提示的快捷方式的网站,它使用任务计划程序作为启动程序的方式。
如果您不想手动调用它,您仍然可以使用任务计划程序的常用功能自动启动程序。