Pergunta

Eu tenho um aplicativo de formulários planície antiga do Windows com um instalador WiX, e é instalado para todos os usuários para a pasta Program Files como seria de esperar. Os anfitriões suplementos de aplicativo usando o System.AddIn quadro .

Porque as necessidades de enquadramento System.AddIn para escrever a alguns dos add-in pastas pipeline (AddIns, AddInSideAdapters, AddInViews, Contracts e HostSideAdapters) Eu não sei o melhor lugar para instalar os add-ins para. Não consigo instalar a Program Files porque o usuário não terá permissão de escrita, e se eu instalar a pasta Application Data do usuário, em seguida, os suplementos não serão instalados para quaisquer outros usuários.

Eu percebo que há exigências conflitantes aqui (os usuários não podem mexer com add-ins de outros usuários, os add-ins precisam ser instalados para todos os usuários e todos os usuários precisam de permissão para escrever), mas qual é a melhor prática caminho a tomar?

É uma pena que os arquivos das necessidades estruturais System.AddIn para escrever não podem ser armazenados separadamente em Application Data, mas que parece ser uma limitação do quadro.

Foi útil?

Solução

Eu sei que esta pergunta foi feita há muito tempo, mas ...

Você já tentou Environment.SpecialFolder.CommonApplicationData?

Em Vista / Windows 7, esta pasta é: %ProgramData%. Eu não estou 100% certo o que é no Windows XP, mas é provavelmente %ALLUSERSPROFILE%.

Em qualquer caso, esta pasta deve ter permissão para ler / escrever e ser o mesmo para todos os usuários.

Não se esqueça de criar uma subpasta para o nome da empresa / aplicação:

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

Outras dicas

Ainda esperando por uma resposta melhor, mas acho que a única maneira de fazer isso é instalar o gasoduto para Arquivos de programas e copiar para dados de aplicativos cada vez que o aplicativo é executado. Você, então, apontar quadro System.AddIn à cópia gasoduto em dados de aplicativos de modo que apenas as tentativas de gravação para o perfil do usuário.

Uhh, você não pode ter ambos "todos os usuários" e "sem elevação". Eu não sei exatamente o que o quadro System.AddIn é, mas se ele se destina a ser executado a partir de um processo de usuário (aka: não um serviço do sistema como processo), então ele deve escrever no perfil do usuário (ApplicationDataFolder é um ótimo lugar) . Isso é uma regra muito fundamental que todas as aplicações devem seguir. Com base na minha compreensão limitada de seus comentários, parece que o quadro System.AddIn está quebrando essa regra.

Mas estou provavelmente apenas faltando alguma coisa.

Você está exigido para usar o instalador WiX? Implantando seu aplicativo como uma solução clickonce vai colocar todo o gasoduto para a pasta de dados do aplicativo usuários. Desta forma, cada usuário pode manter sua própria lista de módulos.

Isso também vai dar a volta a restrição pasta gravável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top