IMAPI:COMException发生内部文件系统错误[-1062555360]

时间:2016-04-27 13:26:06

标签: c# sandbox imapi

我正在使用带有C#.NET Windows应用程序的IMAPI编写CD / DVD。 我在CD上写的数据包含一个可执行文件(test.exe),它也是用C#.NET和虚拟化(sandobx)使用 Turbo Virtualization Studio开发的。 要写在CD上的所有数据都放在C盘上的一个文件夹(源路径)中。

以下是小代码段: -

IStream stream = null;
try
{
    System.Diagnostics.Debug.Print("Adding - " + thisFileItem.SourcePath);
    if (thisFileItem.SourcePath != null)
    Win32.SHCreateStreamOnFile(thisFileItem.SourcePath, Win32.STGM_READ | Win32.STGM_SHARE_DENY_WRITE, ref stream);
    if (stream != null)
    {
        fileSystemImage.Root.AddFile(thisFileItem.DestPath + thisFileItem.DisplayName, stream);
    }
}
finally
{
    if (stream != null)
    {
        Marshal.FinalReleaseComObject(stream);
    }
}

在添加test.exe时调用“fileSystemImage.Root.AddFile”方法抛出COMException -1062555360“发生内部文件系统错误。”所有其他文件都正确添加和写入。

异常详情: -

COMException -1062555360
Internal file system error occurred.
   at ImapiInterop.IFsiDirectoryItem.AddFile(String path, IStream fileData)
   at ImapiImplementation.CDWriter.objBackgroundWorker_DoWork(Object sender, DoWorkEventArgs e) in C:\.........\CDWriter.cs:line 405

如果我将源文件夹放在其他位置(桌面或D盘),则所有写入过程(包括test.exe)都会正常运行而不会出错。

我怀疑这个问题是由于虚拟化而不确定。 请帮忙。

1 个答案:

答案 0 :(得分:2)

IMAPI返回的错误消息不正确,这就是为什么所有的混淆。 请参阅以下链接。

social.msdn.microsoft.com

以下是在上述网站上从答案(来自Dmitri)复制的文字: -

  

IMAPI支持ISupportErrorInfo接口,我们知道   您的方案中错误消息不匹配的问题。

     

在内部,IMAPI创建回滚对象以撤消添加/删除文件   动作。我们遇到了创建回滚操作的问题   过早地,所以在返回IFsiDirectoryItem :: AddFile的代码之后   已经设置,回滚操作是从中删除文件   图片。由于尚未添加文件,因此IMAPI_E_FSI_INTERNAL_ERROR   抛出异常,将IErrorInfo消息更改为一个   你看到了。

     

我们知道这个问题,它将在下一个版本中修复   IMAPI。不幸的是,它还不够严肃,无法解决   修复程序。