代码之家  ›  专栏  ›  技术社区  ›  GraemeF

System.Addin管道应该安装在哪里?

  •  4
  • GraemeF  · 技术社区  · 16 年前

    我有一个简单的带有wix安装程序的旧Windows窗体应用程序,它是为所有用户安装的 Program Files 如您所料的文件夹。应用程序主机加载项使用 System.AddIn framework .

    因为system.add in框架需要写入一些外接程序管道文件夹( AddIns , AddInSideAdapters , AddInViews , Contracts HostSideAdapters )我不知道安装外接程序的最佳位置。我无法安装到 程序文件 因为用户没有写权限,如果我安装到用户的 Application Data 文件夹,则不会为任何其他用户安装加载项。

    我认识到这里有相互冲突的要求(用户不能与其他用户的加载项搞混,需要为所有用户安装加载项,并且所有用户都需要写权限),但是要采取的最佳实践路线是什么?

    很遗憾System.Addin框架需要写入的文件不能单独存储在其中 应用程序数据 但这似乎是框架的一个限制。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Doug    14 年前

    我知道这个问题很久以前就被问到了,但是…

    您尝试过environment.specialfolder.commonapplicationdata吗?

    在Vista/Windows 7中,此文件夹是: %ProgramData% . 我不完全确定Windows XP中是什么,但可能是 %ALLUSERSPROFILE% .

    在任何情况下,此文件夹都应该具有读/写权限,并且对所有用户都是相同的。

    不要忘记为您的公司/应用程序名称创建子文件夹:

    string companyName = "My Company";
    string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
    string path = Path.Combine(folderPath, companyName);
    
        2
  •  1
  •   GraemeF    16 年前

    仍然希望得到更好的答案,但我认为唯一的方法是安装到程序文件的管道,并在每次运行应用程序时复制到应用程序数据。然后将System.Addin框架指向应用程序数据中的管道副本,以便它只尝试写入用户配置文件。

        3
  •  0
  •   Rob Mensching    16 年前

    嗯,你不能同时拥有“所有用户”和“无提升”。我不知道System.Addin框架是什么,但是如果它打算从一个用户进程(也就是说:不是像系统服务那样的进程)运行,那么它必须在用户配置文件下写入(applicationdatafolder是一个很好的地方)。这是所有应用程序都必须遵循的一个非常基本的规则。基于我对您评论的有限理解,听起来System.Addin框架正在打破这一规则。

    但我可能错过了什么。

        4
  •  0
  •   AdamSane    14 年前

    需要使用WIX安装程序吗?将应用程序部署为ClickOnce解决方案将把所有管道放到用户应用程序数据文件夹中。这样,每个用户都可以保留自己的模块列表。

    这也将绕过可写文件夹限制。