C#创建的新流程无法访问某些文件

时间:2015-11-29 14:56:41

标签: java c# .net cmd

我在C#中创建了一个进程(比如说cmd.exe)。但是,创建的exe无法作为用户运行的进程访问所有文件。

我嵌入的屏幕截图清楚地说明了这个问题。我的应用程序创建的进程(cmd)位于左侧,右侧的进程直接使用run命令打开。我已经在这两个命令提示符上执行了dir cmd。计数的差异让我非常惊讶。

对不起,我大声说我没有足够的声誉。所以只是屏幕截图的链接。

The Screenshot showing the difference in counts

我考虑了应用程序的提升,因为我认为不允许该进程访问标准用户的系统所有文件。所以我提升了这个过程。

在我的程序中,我尝试创建一个cmd提示符并从中执行java命令来运行一个jar文件。

也不要问PATH变量(等等,等等,等等)。因为java.exe位于已存在于PATH变量中的system32 /文件夹中。

以下是创建新流程的函数的源代码。

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe");
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
startInfo.Arguments = "/C java.exe";
process.StartInfo = startInfo;
process.Start();

不久,

  • x是使用Process.start
  • 创建的新流程
  • x无法找到常用应用找到的文件。
  • x获得管理员权限
  • x很神秘??

修改

  • 假设x是cmd.exe,它在运行命令cd C:/Windows/System32/
  • 时打开C:/ windows / SysWOW64而不是预期的C:/ Windows / System32
  • 如何访问实际的System32文件夹?

2 个答案:

答案 0 :(得分:1)

使用Visual Studio 2013创建的应用程序默认情况下优先运行在32位模式下。

Windows x64有奇怪的东西

  • C:\ Windows \ System32 - 64位
  • 的Windows系统文件夹(系统目录)
  • C:\ Windows \ SysWOW64 - 32位文件的Windows系统文件夹(系统目录)
  • C:\ Program Files - 64位程序文件的文件夹
  • C:\ Program Files(x86) - 32位程序文件的文件夹

Windows根据它们是32位应用程序还是64位应用程序来处理重定向到System32文件夹。

这会导致为同一命令列出的不同System32目录。使用Process.start和run命令创建的命令提示符分别创建为32位进程和64位进程。

详细了解http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm

将平台更改为x64解决了这个问题。

答案 1 :(得分:0)

查看文件大小,它们也不同,实际上文件夹不一样。右边是C:\ windows \ system32,而左边是C:\ Windows \ SysWOW64

似乎是一个有点紧张的问题。通过Windows任务管理器检查进程的位数。左边的那个旁边应该有* 32。它以32位进程运行,默认情况下位于SysWow64文件夹

注意:OP随后将目标平台更改为x64,解决了问题