winapi installation inno-setup uac

winapi - Cómo escribir en el directorio Mis documentos del usuario con el instalador cuando el usuario usó ''Ejecutar como administrador''



installation inno-setup (3)

Tengo un programa que necesita crear archivos en el directorio Mi documento en la instalación. Este es un requisito fijo estricto, no hay cambio de esto. El problema es que si el usuario ejecuta ''Ejecutar como administrador'' en el archivo de instalación, innosetups constante {userdocs} apunta al directorio del documento del administrador, no al usuario original que inició sesión.

Entonces, Google buscó y encontró esto:

Instalar archivos en la carpeta Mis documentos del usuario original a través de Inno Setup en Windows Vista / 7

La respuesta es incorrecta, sin embargo, porque innosetup incluso dice que

Si un usuario inicia el programa de instalación haciendo clic con el botón derecho en su archivo EXE y seleccionando "Ejecutar como administrador", este indicador, desafortunadamente, no tendrá efecto, porque el programa de instalación no tiene la oportunidad de ejecutar ningún código con las credenciales del usuario original. Lo mismo es cierto si la instalación se inicia desde un proceso ya elevado. Sin embargo, tenga en cuenta que esto no es una limitación específica de Inno Setup; Los instaladores basados ​​en Windows Installer no pueden volver a las credenciales de usuario originales en estos casos.

Supongo que puedo alentar al usuario a no usar el Administrador de ejecución, pero no sé cómo evitar que no suba.

Estaba pensando en hacer que el programa configurara el directorio de Mis documentos / Program en la primera ejecución (después de haberlo instalado). ¿Funcionaría esta solución? Tendría que copiar los archivos de su directorio de archivos de programa como un usuario potencialmente limitado. ¿Es posible o me toparé con problemas de privilegios?



La respuesta al original es válida pero no recomendada. Cuando se ejecuta la configuración, RunAsOriginalUser se ejecutará como el usuario que actualmente RunAsOriginalUser sesión en Windows. Esto se hace dejando que parte de la configuración se ejecute sin escalas, y luego ejecuta otra copia que se eleva para hacer la instalación real.

Cuando el usuario hace explícitamente "Ejecutar como administrador", el "stub no ascendente" también se ejecuta elevado, en cuyo caso, no hay nada que la configuración pueda hacer para acceder al usuario original ya que esa información ya ha sido reemplazada.

La práctica aceptada es hacer cualquier trabajo específico de perfil en la aplicación como sugirió, lo que también significa que funcionará para otros usuarios y en un entorno LUA en pre Vista (donde habría tenido exactamente la misma situación que está viendo ahora).


Primero, asegúrese de que el instalador no requiera la elevación de privilegios por sí mismo, configurando PrivilegesRequired=lowest :

[Setup] PrivilegesRequired=lowest

Para cancelar el instalador, cuando el instalador ejecuta explícitamente "Como administrador" por el usuario, en Windows Vista y versiones anteriores, use IsAdminLoggedOn en InitializeSetup :

[Code] function InitializeSetup(): Boolean; begin Result := True; if (GetWindowsVersion >= $05010000) and IsAdminLoggedOn then begin MsgBox(''Do not run this installer "As Administrator".'', mbError, MB_OK); Result := False; end; end;

Para obtener más información sobre el tema, consulte Instalar archivos en la carpeta Mis documentos del usuario original a través de Inno Setup en Windows Vista / 7 .