【发布时间】: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 位,它解决了这个问题。请将其作为答案发布,以便我接受。