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

本文关键字:访问 文件 进程 新创建 创建 | 更新日期: 2023-09-27 18:24:54

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

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

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

显示计数差异的屏幕截图

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

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

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

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

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#新创建的进程无法访问某些文件

使用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根据System32文件夹是32位应用程序还是64位应用程序来处理重定向到System32文件夹的操作。

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

在上阅读更多信息http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm

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

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

这似乎是一个微不足道的问题。通过windows任务管理器检查进程的比特性。左边的一个旁边应该有*32。它作为一个32位进程运行,默认情况下在SysWow64文件夹中

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

问题