hur.cn - 华软网

 热门搜索

服务程序权限问题,启动solidwork程序

  作者:未知    来源:网络    更新时间:2011/1/13
我建了一个服务程序,
C++">
//创建服务
    SC_HANDLE hService = ::CreateService(
        hSCM, szServiceName, szServiceName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
        SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
        szFilePath, NULL, NULL, _T(""), NULL, NULL);

然后在自己的ServiceMain里面去启用SolidWorks程序(一个三维软件),以下
C++">
                  CString lpszProgID;
lpszProgID.Format(_T("SldWorks.Application.%d"),progID);//int progID;
HRESULT hr;
CLSID clsid;
hr = ::CLSIDFromProgID(lpszProgID, &clsid);
if (FAILED(hr))
{
OutputDebugString(_T("OpenSW--error: CLSIDFromProgID function failed"));
return FALSE;
}
OutputDebugString(_T("OpenSW---before CoCreateInstance"));
hr = ::CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, __uuidof(ISldWorks), (void**)&m_iSldWorks);  //这里每次都失利
                   if (FAILED(hr))
{
OutputDebugString(_T("error: CoCreateInstance function failed"));
return FALSE;
}

上面的启用若在不是服务程序里能成功完成,但在服务程序中失利。
我问我咱们公司的一个大牛,他说是服务程序的权限问题,服务 = system权限,而启用SolidWorks需要普通权限。
我不是很明白,为什么system权限连普通权限都不如么
他告诉我他以前做的是通过另外做一个事情启用solidworks,然后在服务中调用启用那个工具
我想问大家,真若是权限问题的话,难道就只可这么做了么?能通过那个CreateService函数来改变权限或其余方法来做么?
---华软 网友回答---
是否是你的程序依赖其余的资源
---华软网友回复---
引用 1 楼 jyh_baoding 的回复:
是否是你的程序依赖其余的资源

没有依赖,一样的环境下,就算在服务没注册的时候,放在winMain入口函数中启用也能够起来。但如果注册服务后,在服务管理器中点击启用之后就起不来
---华软网友回复---
能够在
这里设置一下登陆用户,一般设置成administrator

---华软网友回复---
try

把服务设为允许合桌面交互

---华软网友回复---
引用 4 楼 hdt 的回复:
try

把服务设为允许合桌面交互

。。太谢谢了。。。虽然后续的还不是很确定是否能够正常调用,当适才改成SERVICE_INTERACTIVE_PROCESS|SERVICE_WIN32_OWN_PROCESS后就真的能够起来了。。。

以前我自己太大意了,直接SERVICE_INTERACTIVE_PROCESS起不来,刚又尝试把两个或起来就能够了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。