我正在尝试将IL代码编译为程序集。我应该通过我的C#应用程序调用{{1}}。我正在通过ilasm.exe
实例调用ilasm.exe
。 PE的生成工作正常,我的大会正在运作。
我的问题是我的应用程序创建的文件之后需要管理员权限才能执行。
如果我从命令行手动调用ProcessStartInfo
,则不需要管理员权限。
使用ilasm.exe命令:
ilasm.exe
我的应用程序调用ilasm.exe:
ilasm.exe /qui /output="c:\test\newFile.exe" <path to il file>
我做错了吗?从C#调用另一个进程时,是否需要指定其他任何内容?
我正在运行我的应用程序和没有管理员权限的命令行。
答案 0 :(得分:4)
它需要UAC,因为您没有提供output
中可写位置的路径,因此它正在尝试写入ilasm
所在的同一文件夹(或您应用的当前文件夹) 。
非管理员用户对%WINDIR%
(Windows文件夹)或%ProgramFiles%
下的任何内容没有写入权限,因此要求提升对该文件夹具有写入权限的用户
答案 1 :(得分:1)
什么是patchFile?
@Chris的评论与这个谜题有关,我在问题中没有看到。您可能正在处理Microsoft需要使用UAC解决的难题。支持需要UAC权限但不要求它的旧程序,因为它们是在Vista之前编写的。像安装人员一样。和补丁程序。
我的水晶球说你的实际程序名称不是newFile.exe,就像你的问题所说,但有一个名称,如“update.exe”或“patch.exe”。此外,您在生成的程序中不包含清单也不明显。一个清单,表明程序可以通过<requestedExecutionLevel>
元素识别Vista。此外,同样不明显的是,当您从命令行手动运行它时,您使用.exe的另一个名称。
这是很多猜测,但把它们放在一起就有意义了:Windows变成了“啊哈!老程序,听起来好像要在限制目录中写入.exe文件。更好地显示UAC提示”