Pregunta

Tengo una aplicación Windows Forms antigua y sencilla con un instalador de WiX, y está instalada para todos los usuarios en la carpeta Archivos de programa como usted esperaría. La aplicación aloja complementos utilizando el marco de trabajo System.AddIn .

Debido a que el marco System.AddIn necesita escribir en algunas de las carpetas de canalización de complementos ( AddIns , AddInSideAdapters , AddInViews , < código> Contratos y HostSideAdapters ) No conozco el mejor lugar para instalar los complementos. No puedo instalar en Archivos de programa porque el usuario no tendrá permiso de escritura, y si instalo en la carpeta Datos de la aplicación del usuario, los complementos no ser instalado para cualquier otro usuario.

Me doy cuenta de que hay requisitos conflictivos aquí (los usuarios no pueden meterse con los complementos de otros usuarios, los complementos deben instalarse para todos los usuarios y todos los usuarios necesitan permiso para escribir), pero ¿cuál es la mejor práctica? ruta a tomar?

Es una pena que los archivos que el marco System.AddIn debe escribir no se puedan almacenar por separado en Datos de la aplicación , pero eso parece ser una limitación del marco.

¿Fue útil?

Solución

Sé que esta pregunta se hizo hace mucho tiempo, pero ...

¿Has probado Environment.SpecialFolder.CommonApplicationData?

En Vista / Windows 7, esta carpeta es: % ProgramData% . No estoy 100% seguro de qué es en Windows XP, pero es probable que sea % ALLUSERSPROFILE% .

En cualquier caso, esta carpeta debe tener permiso para leer / escribir y ser la misma para todos los usuarios.

No olvide crear una subcarpeta para el nombre de su empresa / aplicación:

string companyName = "My Company";
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(folderPath, companyName);

Otros consejos

Todavía espero una mejor respuesta, pero creo que la única forma de hacerlo es instalar la canalización a Archivos de programa y copiarla a los Datos de la aplicación cada vez que se ejecuta la aplicación. Luego, debe apuntar el marco de System.AddIn a la copia de la canalización en los Datos de la Aplicación para que solo intente escribir en el perfil de usuario.

Uhh, no puedes tener a ambos " todos los usuarios " y " sin elevación " ;. No sé exactamente qué es el marco System.AddIn, pero si está diseñado para ejecutarse desde un proceso de usuario (también conocido como: no es un servicio de sistema como el proceso), debe escribir bajo el perfil de usuario (ApplicationDataFolder es un excelente lugar) . Esa es una regla muy fundamental que todas las aplicaciones deben seguir. Según mi comprensión limitada de sus comentarios, parece que el marco System.AddIn está rompiendo esa regla.

Pero probablemente solo estoy perdiendo algo.

¿Debes usar el instalador de WiX? Al implementar su aplicación como una solución de clic, se pondrá toda la canalización en la carpeta de datos de la aplicación del usuario. De esta manera, cada usuario puede mantener su propia lista de módulos.

Esto también evitará la restricción de la carpeta de escritura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top