【问题标题】:C# New process created cannot access certain filesC# 创建的新进程无法访问某些文件
【发布时间】:2015-11-29 14:56:41
【问题描述】:

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

我嵌入的屏幕截图清楚地说明了这个问题。我的应用程序创建的进程(cmd)位于左侧,右侧的进程直接使用运行命令打开。我已经制作了一个 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 文件夹?

【问题讨论】:

  • 看文件大小,它们也不同,实际上文件夹也不一样。右边是 C:\windows\system32 而左边是 C:\Windows\SysWOW64
  • 是的,你是对的。但我做了同样的命令C:\windows\system32。有可能吗??
  • 似乎是位问题。通过 Windows 任务管理器检查您的进程的位数。左边的应该有 *32 旁边。它作为 32 位进程运行,默认位于 SysWow64 文件夹中
  • @OguzOzgul 我已将目标平台切换到 64 位,它解决了这个问题。请将其作为答案发布,以便我接受。

标签: java c# .net cmd


【解决方案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 解决了该问题。

【讨论】:

    【解决方案2】:

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

    似乎是个小问题。通过 Windows 任务管理器检查您的进程的位数。左边的应该有 *32 旁边。它作为 32 位进程运行,默认位于 SysWow64 文件夹中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多