C# Outlook 2010 VSTO-非管理员用户收到;操作失败。”;调用Task.Save时

C# Outlook 2010 VSTO-非管理员用户收到;操作失败。”;调用Task.Save时,c#,outlook,vsto,task,add-in,C#,Outlook,Vsto,Task,Add In,我有一个Outlook加载项,它可以成功地为大约100个用户工作。它与我们的应用程序交互,并创建/更新任务和约会项目。但是,一个客户端无法让它为非网络管理员的任何人工作。通过一些日志记录,我可以看到它工作正常,直到它到达应该保存任务的部分,然后抛出臭名昭著的“操作失败”错误。我试图通过调查内部异常等获得更多错误详细信息,但徒劳无功,但“操作失败”似乎是我唯一能从中得到的 为了简化调试,我从图片中删除了我们的应用程序,并为它们编写了一个测试加载项,它只创建了9个任务(硬编码为“任务1”、“任务2”

我有一个Outlook加载项,它可以成功地为大约100个用户工作。它与我们的应用程序交互,并创建/更新任务和约会项目。但是,一个客户端无法让它为非网络管理员的任何人工作。通过一些日志记录,我可以看到它工作正常,直到它到达应该保存任务的部分,然后抛出臭名昭著的“操作失败”错误。我试图通过调查内部异常等获得更多错误详细信息,但徒劳无功,但“操作失败”似乎是我唯一能从中得到的

为了简化调试,我从图片中删除了我们的应用程序,并为它们编写了一个测试加载项,它只创建了9个任务(硬编码为“任务1”、“任务2”等),并且在同一位置失败,出现了相同的错误。我要求他们编写一个宏,看看宏是否能够为这些用户创建任务。我正在等待他们对此的答复

无论如何,我已经在MSDN上呆了一个多月,试图在这个问题上获得帮助,但是没有人能够提供帮助。我希望这里有人能给我们一些启示。如果您能提供任何关于可能发生的事情的见解或建议来帮助我追踪问题,我们将不胜感激

这是我用来在测试加载项中创建示例任务的函数:

private void CreateTasks()
{
    int i = 1;
    Outlook.TaskItem t = null;
    Outlook.UserProperties ups = null;
    Outlook.UserProperty up = null;
    string name = string.Empty;

    while (i < 10)
    {
        name = string.Format("Task {0}", i.ToString());

        t = Application.CreateItem(Outlook.OlItemType.olTaskItem);

        t.Subject = name;
        t.Status = Outlook.OlTaskStatus.olTaskNotStarted;
        t.Body = string.Format("Task {0} description", i.ToString());
        t.Categories = "Test Task";
        t.Importance = Outlook.OlImportance.olImportanceNormal;
        t.ActualWork = 0;
        t.TotalWork = 5 * 60;

        //mimic dates that might come in main add-in
        DateTime st = Convert.ToDateTime("12/10/2013");
        st = st.AddDays(i);
        t.StartDate = st;

        DateTime end = Convert.ToDateTime("01/02/2014");
        end = end.AddDays(i);
        string EP = end.ToShortDateString() + " 5:00:00 PM";
        end = Convert.ToDateTime(EP);
        t.DueDate = end;

        //mimic how we keep track of our items in the main add-in
        ups = t.UserProperties;
        up = ups.Find("ID");
        if (up == null)
        {
            up = ups.Add("ID", Outlook.OlUserPropertyType.olText);
        }
        up.Value = string.Format("ID {0}", i.ToString());

        //This is where the "The Operation Failed." error occurs on every single task.
        try
        {
            ((Outlook._TaskItem)t).Save();
        }
        catch (Exception ex)
        {
            //logs message to file
        }

        //Release objects
        if (up != null) Marshal.ReleaseComObject(up);
        if (t != null) Marshal.ReleaseComObject(t);

        i++;
    }
    GC.Collect();
}
private void CreateTasks()
{
int i=1;
Outlook.TaskItem t=null;
Outlook.UserProperties ups=null;
Outlook.UserProperty up=null;
string name=string.Empty;
而(i<10)
{
name=string.Format(“任务{0}”,i.ToString());
t=Application.CreateItem(Outlook.OlItemType.olTaskItem);
t、 主题=姓名;
t、 状态=Outlook.OlTaskStatus.olTaskNotStarted;
t、 Body=string.Format(“任务{0}描述”,i.ToString());
t、 Categories=“测试任务”;
t、 重要性=Outlook.OlImportance.olImportanceNormal;
t、 实际工作量=0;
t、 总功=5*60;
//模拟主加载项中可能出现的日期
DateTime st=转换为ToDateTime(“12/10/2013”);
st=st.AddDays(i);
t、 起始日期=st;
DateTime end=转换为ToDateTime(“2014年2月1日”);
结束=结束。增加天数(i);
string EP=end.toSortDateString()+“5:00:00 PM”;
结束=转换到当前时间(EP);
t、 截止日期=结束;
//模拟我们在主加载项中跟踪项目的方式
ups=t.UserProperties;
up=ups.Find(“ID”);
if(up==null)
{
up=ups.Add(“ID”,Outlook.OlUserPropertyType.olText);
}
up.Value=string.Format(“ID{0}”,i.ToString());
//这就是“操作失败”的地方。每个任务都会发生错误。
尝试
{
((Outlook._TaskItem)t).保存();
}
捕获(例外情况除外)
{
//将消息记录到文件中
}
//释放对象
如果(向上!=null)封送处理ReleaseComObject(向上);
如果(t!=null)封送处理ReleaseComObject(t);
i++;
}
GC.Collect();
}
根据MSDN:

Saves the Microsoft Outlook item to the current folder or, 
if this is a new item, to the Outlook default folder for the item type.
“非管理员用户”是否有权访问此文件夹


我打赌这与访问权限有关。这将是第一个开始的位置。

这是在Exchange邮箱中吗?我以前在与服务器的连接变得不稳定时看到过这个错误。如果是,请查看从缓存模式切换到联机模式时是否发生错误。我不认为这是一个代码问题