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

检索ClickOnce应用程序中包含的文件的路径?

  •  0
  • Simon  · 技术社区  · 15 年前

    我正在通过ClickOnce(从网络“联机”运行)分发应用程序,应用程序中包含两个文本文件,它们在发布时被正确复制到部署位置。

    我正试图通过程序引用这些文件的路径:

    Dim t As New HTMLTemplate("ReportTemplates\IncidentDetailMain.txt")
    

    有时这是可行的,有时应用程序似乎在用户的“我的文档”文件夹中查找,从而导致DirectoryNotFoundException。

    有人能解释一下这是怎么回事吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   andyhammar    15 年前

    最好的方法是使用

    System.Windows.Forms.Application.StartupPath
    

    它将为您提供应用程序可执行文件所在的文件夹的URI。然后,您可以使用引用文件,在您的情况下,该引用文件应该始终位于可执行文件的相同相对路径中。

    MSDN: Application.StartupPath

    这可以用于WinForms和WPF应用程序。

    如果您允许用户打开/保存文件等,那么在应用程序的生命周期中,system.environment.currentdirectory可能会发生更改,因此startuppath更安全。

    所以,您的最终代码是:

    string filePath = Path.Combine(
        System.Windows.Forms.Application.StartupPath,
        "ReportTemplates\IncidentDetailMain.txt");
    .. = new HTMLTemplate(filePath);
    
        2
  •  1
  •   RC1140    15 年前

    最安全的方法是获取exe的路径,然后将其作为基础。

    您可以使用以下位置system.environment.currentdirectory来完成此操作