应用程序运行无法删除文件的批处理文件

Application runs batch file which can't delete file

本文关键字:文件 批处理文件 删除 运行 应用程序      更新时间:2023-10-16

我有一个c#应用程序,它创建一个批处理文件,然后运行它。这个批处理文件调用一个c++应用程序,它应该删除一个特定的文件。

当我运行c#应用程序:

  • 创建批处理文件ok
  • 可以运行批处理文件
  • 删除文件失败

这是c++代码和文档:

// Attempt to delete the object from the device
hr = content->Delete(PORTABLE_DEVICE_DELETE_NO_RECURSION,   // Deleting with no recursion
                                        objectsToDelete.Get(), // Object(s) to delete
                                        nullptr);

当我从命令行运行创建的批处理文件时,它可以工作,所以我不知道问题在哪里。

这不是一个完整的答案,但是所需的故障排除步骤不适合在评论中,因此作为一个答案(当更多信息来自OP时我会修改):

根据你发布的文档链接,如果第三个参数收到一个指针而不是nullptr,那么在S_FALSE返回的情况下,它将包含特定的错误信息。此信息与确定您正在经历的故障原因有关。

以下是文档中关于S_FALSE含义的引用:

至少有一个对象无法删除。如果指定了ppResults参数,则包含每个对象的错误代码。

请将代码修改如下:

// Attempt to delete the object from the device
IPortableDevicePropVariantCollection *pResults;
hr = content->Delete(PORTABLE_DEVICE_DELETE_NO_RECURSION,   // Deleting with no recursion
                                        objectsToDelete.Get(), // Object(s) to delete
                                        &pResults);
//TODO: Dump contents of pResults to log/cout/etc., in form objectsToDelete[i]=pResults[i]...

OP:请修改您的代码以捕获ppResults并使用该结构中的信息修改您的问题。