Onde é que o gasoduto System.AddIn ser instalado?
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.
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.