1

我正在使用带有 C#.NET windows 应用程序的 IMAPI 编写 CD/DVD。我在 CD 上写入的数据包含一个可执行文件 (test.exe),它也是使用 C#.NET 开发并使用Turbo Virtualization Studio虚拟化 (sandobx) 。所有要写入 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)都会正常进行而不会出错。

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

4

1 回答 1

2

IMAPI 返回的错误信息不正确,这就是所有混乱的原因。请参考以下链接。

社交.msdn.microsoft.com

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

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

在内部,IMAPI 创建回滚对象以撤消添加/删除文件操作。我们遇到过早创建回滚操作的问题,因此在设置了 IFsiDirectoryItem::AddFile 的返回代码后,回滚操作是从图像中删除文件。由于尚未添加文件,因此引发了 IMAPI_E_FSI_INTERNAL_ERROR 异常,这会将 IErrorInfo 消息更改为您所看到的消息。

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

于 2016-05-02T10:37:54.497 回答