更改子进程的父进程

时间:2013-12-30 15:29:07

标签: c#

我正在寻找如何做约6个小时,但没找到方法。

有什么办法可以改变流程的父流程吗?一些api maby?

谷歌没有提供太多,同样的网站,所以我打开了新的问题。

我要做的是锁定文件供个人使用,然后将其删除。 我在程序A上创建文件并将其与程序B一起使用,当B完成使用时,我用A删除,那就是B创建了一个子进程,它没有B作为他的父进程,所以当我使用时:

File.Open(_moviePath, FileMode.Open, FileAccess.Read, FileShare.Inheritable);

我尝试锁定文件,因为我不希望其他程序/用户能够复制它 它很糟糕。

TNX。

1 个答案:

答案 0 :(得分:1)

而不是以这种方式锁定文件,为什么不使用Mutex?它允许跨进程锁定。如果要保留在一个盒子上,这将正常工作。 http://msdn.microsoft.com/en-us/library/bwe34f1k(v=vs.110).aspx

并且您无法将父流程所有者重新分配给子流程。

以下是一个例子,我将在下面解释:http://www.dotnetperls.com/mutex

使用System; 使用System.Threading;

class Program
{
   static Mutex _m;

   static bool IsMutexExisting(string token)
   {  
    try  
    {
      // Try to open existing mutex.
      Mutex.OpenExisting(token);
    } 
    catch
    {
      return true;
     }
     // More than one instance.
   return false;
   }

所以在你的示例程序中,A会做它然后等待..如何让A等待?

让程序尝试打开现有的互斥锁(只有B将创建的互斥锁),例如...... pcode:

 while( IsMutexExisting("B Token") == false )
 {
     System.Threading.Thread.Sleep(500);  //sleep for a 1/2 sec
 }
 //ok, B has created the mutex, let's wait for it to be released indicating it is complete.
Mutex m = Mutex.OpenExisting("B Token");
m.WaitOne();  // will block execution until B releases the Mutex

 // lock created, this means B signaled us

 // do the rest of A code here...

计划B:

 <does what it does>
 //Create Mutex to signal A
 Mutex m = null;
 try{
     m =new Mutex(true,"B Token");

 ...
 ...
 }
 finally{
    m.ReleaseMutex();
 }