windows - Windows 7 上的 StartServiceCtrlDispatcher 访问被拒绝

标签 windows service access-denied

我在 Windows 7 上的 visual studio 2008 中有一个 c++ 项目,我尝试在其中启动一个新服务。 我以管理员身份运行 visual studio。 我无法启动服务(甚至没有调用 serviceMain)。

这是我的主要功能:

wchar_t str[] = {'s','e','s','m'};

int _tmain(int argc, _TCHAR* argv[])
{
    SERVICE_TABLE_ENTRY dispTable[] =
    {
        {(wchar_t*)str, ServiceWork::ServiceMain}, 
        {NULL, NULL}
    };

    int i = StartServiceCtrlDispatcher(dispTable);
    int j = GetLastError();
    return 0; 
}

输出是:

. . .

“SessionMonitor.exe”:已加载“C:\Windows\SysWOW64\cryptbase.dll”

“SessionMonitor.exe”:已加载“C:\Windows\SysWOW64\imm32.dll”

“SessionMonitor.exe”:已加载“C:\Windows\SysWOW64\msctf.dll”

SessionMonitor.exe 中 0x7638b9bc 处的第一次机会异常:0x00000005:访问被拒绝。 线程“Win32 线程”(0x129c) 已退出,代码为 0 (0x0)。 程序“[2492] SessionMonitor.exe: Native”已退出,代码为 0 (0x0)。

调试时,j 为 1063 - ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

有没有人遇到过这个问题? 有什么解决办法吗?

谢谢你 锂铁

最佳答案

问题在于您在 visual studio 中启动服务。

这是不可能的。您只需使用 visual studio 编译该服务,然后使用 sc 命令(或以编程方式如 here 所述)在命令提示符下注册它。 this的接受答案中描述了所有正确的方法问题。

如果要调试服务代码,必须直接发出ServiceMain,例如:

int _tmain(int argc, _TCHAR* argv[])
{
#ifdef AS_SERVICE
    SERVICE_TABLE_ENTRY dispTable[] =
    {
        {(wchar_t*)str, ServiceWork::ServiceMain}, 
        {NULL, NULL}
    };

    int i = StartServiceCtrlDispatcher(dispTable);
    int j = GetLastError();
    return 0;
#else
    ServiceMain(argc, argv);
#endif
}

StartServiceCtrlDispatcher 失败并且 GetLastError 返回 ERROR_FAILED_SERVICE_CONTROLLER_CONNECT (1063)

时,同样的问题也会出现

关于windows - Windows 7 上的 StartServiceCtrlDispatcher 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649967/

相关文章:

c++ - 使用管道从子进程重定向 I/O - winapi

android - 为两个应用程序启动一次服务

python - 为什么我在使用 mrjob 运行 python 文件时得到 "WindowsError [Error5] Access is denied"

php - 将一个文件夹中的所有文件和文件夹移动到另一个?

windows - 如何在 cmd.exe 中用百分比字符替换?

c# - 将多维数组数据从 C# webservice 返回到 vba

service - 依赖注入(inject)的最佳实践

HSQLDB:.data 文件访问被拒绝

inno-setup - Inno Setup 安装 - 访问被拒绝

windows - 如何在Matlab 2009b中增加数组 block 并解决内存不足错误?