Process.Start和手动运行exe之间的区别

时间:2013-05-06 14:49:34

标签: c# permissions autodesk

大图:我写了一个Autodesk发明者插件。在Inventor的关闭事件中,它启动另一个程序,我称之为purgeworkspace.exe。 purgeworkspace.exe一直等到Inventor关闭,然后删除Inventor正在使用的文件。

以下是调用purgeworkspace.exe的相关插件代码。

//Run as admin
if (System.Environment.OSVersion.Version.Major >= 6)
{
    Process p = Process.Start(Properties.Settings.Default.exePath);
    p.StartInfo.Verb = "runas";
}

如果从插件启动purgeworkspace.exe,我会收到IOException,说文件正在使用中。但是,如果我通过双击exe手动运行purgeworkspace.exe,它每次都很完美。我的信念是,这是由于权限,但我不知道是什么。正如您所看到的,我已经尝试以管理员身份运行我的exe,但它并没有解决问题。

purgeworkspace.exe与我手动启动时的工作方式完全相同。如何以编程方式调用它以便以相同的方式运行?

编辑: 这里有一些代码来演示purgeworkspace如何等待发明者。请记住,当我手动启动它以及从Inventor插件运行时,这个代码都会运行。

static void Main()
{
   while (IsProcessOpen("Inventor"))
   {
       System.Threading.Thread.Sleep(50);
   }
}

private static bool IsProcessOpen(string name)
{
   return Process.GetProcesses().Any(clsProcess => clsProcess.ProcessName.Contains(name));
}

1 个答案:

答案 0 :(得分:1)

无论采取了哪些预防措施,某些内容仍然会锁定您的文件。也许具有打开文件句柄的进程不像“Inventor”那样命名?

您可以使用this question来解决这个问题。