Establezca que un programa debe ejecutarse al inicio desde un instalador

Tengo una aplicación C # .net 4, estoy empezando a crear el instalador.

El programa instalado funciona bien, pero mi cliente quiere que la aplicación comience con una ventana (es una barra de herramientas "Siempre arriba" que les ayuda a administrar su llamada).

Pensé en crear un "Instalador de clase" e insertar una clave en el registro.

Tengo dos problemas:

Primero: ¿Cómo puedo encontrar la ruta ejecutable? Puede cambiar entre instalaciones. Encontré en alguna parte una Application.ExecutablePath, pero parece que se encuentra en Application.Window.Forms, así que creo que no es compatible con WPF

Segundo: necesito insertar esta clave en el registro de la máquina local. ¿Hay alguna forma en un instalador de Windows para especificar que el usuario debe tener derechos de administrador?

Aquí está el código que comencé:

RegistryKey rkApp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("CstStart", ???);

¡Muchas gracias por su ayuda

EDIT: descubrí que puedo pasar a mi acción personalizada algunos datos, con:

/ DIR = "[TARGETDIR] \"

en CustomActionData.

Normalmente se dice que puedo recuperarlo a través de la

this.Context.Parameters["DIR"];

Pero ... parece que en mi clase de instalador, esto. El contexto es nulo:

EDIT2: El contexto era nulo porque estaba haciendo esto en el constructor, ahora estoy haciendo esto en el caso de esto. Después de instalar y ahora obtengo un contexto, que parece contener una "ruta de ensamblaje" var que contiene exactamente la ruta I necesitar

Respuestas a la pregunta(1)

Su respuesta a la pregunta