I am currently developing software which I would like while the software is installing, it can create the native images for the software in the background.
I am thinking of using NGEN and also set the process priority to low because I don't want it to consume 100% CPU. But I found out the ".NET Runtime Optimization Service" is actually missing from the "Services" on my computer. So NGEN won't actually continue all my process even when the computer is in "idle".
I just wonder is there any way I can re-register the service or are there any solutions for it?

Not sure what version of .net you are using, however ngen is not always doing the same on all Maschine's you would like to deploy to.
For that reason MS has altered the compiler and project structure. A small extract from my project shows this have a look at the PublishReadyToRun as this PublishTrimmed does what NGEN used to do, making a single file helps by setting PublishSingleFile to true would help if you like to deployment easy as it makes 1 huge exe and removes all dll's.
Have a look at Mr Hanselman blog on this.
One of the first things I noticed when I used it is that I had a FileNotFound exception when the exe loaded the dependencies. You can fix this by looking at the name of the file missing that basically got removed by the optimisation and add them to the TrimmerRootAssembly like I did in the sample. After adding those 4 I had no more issues.
NGEN Client machines that do not have NGEN or the "wrong" one would need to have the .NET Framework SDK installed (why would a user have a SDK/ Software Development Kit installed...)
if that file is missing (you can test for it using the path using something like this:
If that returns no file you can pop a message for the user to download and install the "right sdk" after that you can continue with your optimisation strategy using the command line for ngen.exe
LOW priority An easy trick to start your application in a lower thread priority is by starting it using the START command.