Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 作为服务运行时通信不工作_C#_Service_Com_Mapi - Fatal编程技术网

C# 作为服务运行时通信不工作

C# 作为服务运行时通信不工作,c#,service,com,mapi,C#,Service,Com,Mapi,我创建了一个通过MAPI访问Exchange服务器的应用程序。托盘应用程序用于启动、停止和配置应用程序。我已经将所有的通信和处理逻辑放在一个单独的库中,该库使用定时器处理邮件。在调试模式下运行时,可直接从托盘应用程序访问库,但在发布模式下运行时,由安装在用户级别的服务调用库。见下图 我已将所有内容配置为使用64位版本的Outlook 2010运行。我遇到的问题是,当我在Debug中构建和安装(直接访问库)时,一切都正常工作。如果安装版本并作为服务运行,则MAPI连接未初始化 我似乎正在访问CO

我创建了一个通过MAPI访问Exchange服务器的应用程序。托盘应用程序用于启动、停止和配置应用程序。我已经将所有的通信和处理逻辑放在一个单独的库中,该库使用定时器处理邮件。在调试模式下运行时,可直接从托盘应用程序访问库,但在发布模式下运行时,由安装在用户级别的服务调用库。见下图

我已将所有内容配置为使用64位版本的Outlook 2010运行。我遇到的问题是,当我在Debug中构建和安装(直接访问库)时,一切都正常工作。如果安装版本并作为服务运行,则MAPI连接未初始化

我似乎正在访问COM对象,因为我从调用的方法中得到的是返回值,而不是异常。我已经将用户帐户设置为我自己的登录名,因此我应该有权访问该配置文件。虽然我可以发布初始化代码,但我不相信它会有帮助。我认为这个问题更多地与权限有关。我尝试在与服务相关联的4种帐户类型中的每一种下运行测试安装,但它们都不起作用。我的用户帐户是否可能无法访问我的邮件配置文件

如果有人对我可能做错的事情有任何想法,我会感谢你的洞察力

编辑

我得到的HRESULT
设置后无法更改线程模式。
我最初将线程模式设置为false,但尝试更改它以查看是否可以解决问题。不幸的是,事实并非如此。我在下面添加了一个代码片段,以防有人发现它有帮助

DWORD dwFlags=0;
if(bMultiThreadedNotifications) dwFlags|=MAPI_MULTITHREAD_NOTIFICATIONS;
if(bInitAsService) dwFlags|=MAPI_NT_SERVICE;

if(dwFlags) 
{
    MAPIINIT_0 MAPIInit={ MAPI_INIT_VERSION, dwFlags };
    lastErrorCode = MAPIInitialize(&MAPIInit);
    //if(lastErrorCode!=S_OK) return FALSE;
    if(FAILED(lastErrorCode)) result = FALSE;
} 
else 
{
    lastErrorCode = MAPIInitialize(NULL);
    //if(lastErrorCode!=S_OK) return FALSE;
    if(FAILED(lastErrorCode)) result = FALSE;
}

解决方案由Dmitry Streblechenko发布,可在此处找到:

基本上,MAPI被初始化了两次,所以我必须将MAPI\u NO\u COINIT添加到我的标志中。在那之后,一切顺利


谢谢大家的帮助。

事件日志中有任何信息吗?我很可能认为是权限问题。您能否尝试使用windows用户凭据(登录用户)更改您的windows服务凭据(默认本地系统)并查看其是否有效…@sumeet kumar:谢谢您的回复。我是在用户帐户下运行的,尽管我已经尝试更改所有帐户,以查看它是否会有所不同。我同意这可能是权限问题,但不确定为什么该服务在用户帐户下没有权限。可能是@14V的副本:不幸的是,除了一个说服务正确启动的日志和我放在那里的日志之外,没有任何事件日志,