c# - 调用 Process.Start 并终止后无法访问 "Safely Remove"闪存驱动器

标签 c# .net process

我有一个要从闪存驱动器运行的应用程序,比如 F:\App.exe:

static void Main(string[] args)
{
    Process.Start(@"C:\AnotherApp.exe");
}

但是,在 App.exe 终止后,“安全删除”驱动器 F: 是不可能的,直到 AnotherApp.exe 也终止。使用 Sysinternals Process Monitor 查看进程树时,进程 AnotherApp.exe 仍然是 App.exe 的子进程(已终止)。

有没有办法从闪存驱动器上的应用程序启动进程,而不会阻止其安全删除?

最佳答案

Process.Start 始终生成一个进程作为正在启动的应用程序的子进程。

即使你终止了 parent , child 仍然是那个 parent 的孤儿,我认为它仍然持有 parent 的句柄。

编辑:

好的,我明白了。
问题是子进程以 F:\ 作为其当前目录启动。
您可以使用 CreatePocess() 通过 P/Invoke 创建进程,并设置一个不同的起始目录(我已经测试过它并且有效)。

这里的例子:

http://pastebin.com/QsMqejS5

关于c# - 调用 Process.Start 并终止后无法访问 "Safely Remove"闪存驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282435/

相关文章:

c# - foreach 循环中的 orderby 失去范围

c# - C# .net 中的并行端口访问

c# - 如何刷新挂起的 FileSystemWatcher 事件?

linux - 当子进程退出时父进程在 Linux 中畅通无阻,如何让父进程调用等待?

Windows:具有重定向输入和输出的子进程

qt - Qt中如何获取所有正在运行的进程

c# - 如何根据内容拆分字符串?

c# - "cast negative number to unsigned integer"这个习语是什么意思?

java - 条件组合时的圈复杂度

c# - 在 UWP 应用程序中存储 API key 和 secret 的推荐方法是什么?