我在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();
不久,
修改
cd C:/Windows/System32/
答案 0 :(得分:1)
使用Visual Studio 2013创建的应用程序默认情况下优先运行在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,解决了问题