process.start:新进程有不同的文件权限然后是父进程,为什么?

时间:2014-04-23 15:26:08

标签: c# file-permissions process.start

我正在使用以下代码从我的主进程启动子应用程序:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = DestinationNameEXE;
startInfo.WorkingDirectory = Toolbox.AssemblyDirectory;
startInfo.UseShellExecute = true;
startInfo.Arguments =
binParameter + @" """ + _BINPath + @" """
+ tmpParameter + @" """ + binFolder_ForExtration + @" """;
Process.Start(startInfo);

在我这样做之前,我检查进程是否具有binFolder_ForExtration和_BInPath中的写权限,并使用以下代码(source)和一个简单的写文件检查:

try
{
    using (File.Create(tmpfile)) { }
    File.Delete(tmpfile);
    createFilesAllow = true;
}
catch
{
    createFilesAllow = false;    
}

在主要过程中我可以写&创建文件。函数HasWritePermissionOnDir也返回true。 在新的过程中,我正在进行相同的测试,但在这种情况下,我从HasWritePermissionOnDir获得了true,但如果我尝试创建一个文件,我有一个例外。新进程有权更改现有文件。

这怎么可能?我做错了什么? 新流程如何能够比第一个流程拥有更少的权利? 我不会改变用户上下文。

我还测试了使用ProcessAsUser.Launch(source)启动该过程但没有任何更改。新进程无法在给定文件夹中创建新文件。

如果我以提升的权利启动流程:

  

startInfo.Verb =“runas”;

一切都有效。新进程可以在给定文件夹中编写,创建和更改文件。

thx任何帮助

更新:

  • 我正在测试Windows 7 x86
  • 主进程使用目标x86和.Net 4.5进行编译。它是一个来自vb6应用程序的dll
  • 我正在测试的用户具有管理员权限(但不是用户管理员)。主进程以正常权限设置(非提升权限)启动
  • 使用目标任何CPU和.Net 4.5编译新进程。
  • 因为我需要在新进程中访问 Process.GetProcesses ,所以它应该被编译为在x86和x64系统上使用的任何CPU(据我所知)
  • 目前所有文件夹测试和发生的错误都发生在文件夹* c:\ Program Files(x86)\ appname \ BIN *中。在代码中我正在使用完整路径并使用direcotry.exist()测试路径的正确性bevore任何执行。

0 个答案:

没有答案