服务程序连接远程SQLSERVER数据库失败,该如何处理

服务程序连接远程SQLSERVER数据库失败
我做了一个服务程序,当把服务安装好以后在服务管理器中启动服务时,如果连接的是本机的数据库,就能正常运行,但当连接其他机器上的数据库时就会连接失败,错误原因是什么“用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。”
但当我在DEBUG模式下运行(不通过服务管理器启动,而是调用另一个普通函数启动,就像运行普通程序一样)时,同样的连接那台机器的数据库却可以正常运行
我感觉他们的区别就是一个在系统级别下运行,另一个是在用户级别下运行,难道连接方法还不一样吗?
可如果连接的是本机的数据库就不管怎么运行都没有问题
望高手指教


------解决方案--------------------
用系统服务连接时,可能当前程序的用户token等信息不能被sql server远程通过...
------解决方案--------------------
你安装的是Express版的吧,Express初始时只能进行本地连接。建议你使用专业版或企业版的。
------解决方案--------------------
不知道你采用的是什么连接,
我做的采用ado连接,没问题.
我的服务是监视CAD的运行,通过内存映射与应用程序通信(你可以去掉那部分)
为了验证你说的问题,做了一段数据连接测试,连接正常可以听到喇叭响(启动服务的时候).
结果可行





代码如下
 #include <stdio.h>
#include <windows.h>
#include <winsvc.h>
#include <Psapi.h>
#define SERVERNAME "AptAgenServer"
DWORD dwFileVersionMS=0;
DWORD dwFileVersionLS=0;
DWORD dwAllowType=0;/*拒绝类型 0,所有CAD通用,1 只运行当前版本,2,运行高于当前版本,3运行低于当前版本"*/
//注册并启动/终止服务
BOOL RegisterServer(LPCTSTR lpServiceName,LPCTSTR lpDisplayName,LPCTSTR lpBinaryPathName)
{
SC_HANDLE hSCManager = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
if (hSCManager == NULL) return FALSE;
if (CreateService(hSCManager,lpServiceName,lpDisplayName,
SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,lpBinaryPathName,NULL,NULL,NULL,NULL,NULL))
{
printf("RegisterServer...\r\n");
CloseServiceHandle(hSCManager);
return TRUE;
}
else
{
printf("RegisterServer Error Code = %d\r\n",GetLastError());

CloseServiceHandle(hSCManager);
return FALSE;
}
}
typedef struct SHWP_STRUCT_ {
BOOL bConnection;
DWORD dwProcessId;
} SHWP_STRUCT, *LPSHWP_STRUCT;
 
 
BOOL ExecuteService(LPCTSTR lpServiceName)
{

SC_HANDLE hSCManager,hService;
hSCManager = OpenSCManager(0,0,SC_MANAGER_ALL_ACCESS);
if(hSCManager == NULL)
{
return FALSE;
}

hService = OpenService(hSCManager,lpServiceName,SERVICE_ALL_ACCESS);
if(hService == NULL)
{
CloseServiceHandle(hSCManager);
return FALSE;
}

if (StartService(hService,0,NULL))
{
printf("StartService...\r\n");

CloseServiceHandle(hService);
CloseServiceHandle(hSCManager); 
 
return TRUE;
}
else
{
printf("StartService Error Code = %d\r\n",GetLastError());

CloseServiceHandle(hService);
CloseServiceHandle(hSCManager);
return FALSE;
}
}
BOOL TerminateService(LPCTSTR lpServiceName)
{

SC_HANDLE hSCManager,hService;
hSCManager = OpenSCManager(0,0,SC_MANAGER_ALL_ACCESS);
if(hSCManager == NULL)
{
return FALSE;
}

hService = OpenService(hSCManager,lpServiceName,SERVICE_ALL_ACCESS);
if(hService == NULL)
{
CloseServiceHandle(hSCManager);