为什么我的IL生成的汇编,C#调用的ilasm.exe需要UAC?

时间:2012-04-04 00:20:21

标签: c# .net uac cil ilasm

我正在尝试将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#调用另一个进程时,是否需要指定其他任何内容?

我正在运行我的应用程序和没有管理员权限的命令行。

2 个答案:

答案 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提示”