Why does my IL generated Assembly, ilasm.exe called by C#, need UAC?

.net, c#, cil, ilasm, uac

Solution

It's requiring UAC because you're not supplying a path to a writable location in `output`, so it's trying to write to the same folder `ilasm` is in (or the current folder for your app).

A non-admin user doesn't have write access to anything under `%WINDIR%` (the Windows folder) or `%ProgramFiles%`, so it's asking for elevation to a user that does have write access to the folder.

Problem

I'm trying to compile an IL Code to an Assembly. The `ilasm.exe` should get called by my C# Application. I'm invoking the `ilasm.exe` through an `ProcessStartInfo` Instance. The generation of the PE works fine and my Assembly is working. My problem is that the files that were created by my application, afterwards need administrator privileges to be executed. If I call `ilasm.exe` manually from command line, no admin rights are needed. Used ilasm.exe command: `ilasm.exe /qui /output="c:\test\newFile.exe" <path to il file>` My Application calling the ilasm.exe: ``` ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.FileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.Arguments = ilFilePath + " /qui /output=" + outputPath + "testFile.exe"; try { using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } } catch { // Log error. } ``` Am I doing anything wrong? Do I need to specify anything else when calling another Process from C#? I'm running my Application and the commandline without admin rights.

Original source