定义安装文件的位置

问题描述:

我试图将.NET应用程序部署为ClickOnce应用程序,但我在定义应用程序的安装位置时遇到问题。我需要知道这一点,因为我必须包含支持文件。我已经将支持文件添加为“现有项目”。我曾假定该程序将安装在Program Files中,但它并不存在。相反,桌面上只有一个快捷方式。有人可以解释如何/在哪里使用VS2012定义安装路径?定义安装文件的位置

Clickonce应用程序安装在用户配置文件下,而不是Program Files路径。

在Windows Vista和Windows 7,ClickOnce应用程序路径将是介于c:\users\username\AppData\Local\Apps\2.0\

在Windows XP中,ClickOnce应用程序路径将是介于c:\document and Settings\username\LocalSettings\Apps\2.0\

注意ClickOnce应用程序路径是在安装时不同,每次,我发现最好的方法是让您的应用程序将自己的应用程序路径写入注册表项,这样您就可以通过查看注册表确切知道应用程序路径的位置。

所以user831062指出,ClickOnce应用程序安装在用户配置文件下,而不是Program Files路径。因此,安装目录在每台机器上都不同,几乎不可能直接访问。

我被挂断的部分是项目所在文件的位置,更重要的是 - 我如何访问它们?

嗯,正如提到IN THIS LINK,如果您将文件标记为 “数据文件”,下设:

Project Properties > Publish > Application Files > Publish Status 

,你就可以使用类似访问它们:

textBox = File.ReadAllLines(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\myFile.txt")).ToList(); 

如果您不将其标记为“数据文件”,而只是将其标记为“包含(自动)”,则它将位于安装目录本身中,可以通过使用以下类似的方式直接调用文件来访问它:

textBox = File.ReadAllLines(@"myFile.txt")).ToList(); 

无论如何,花了我一个小时左右来找到这个,所以希望它能帮助别人。

我发现的一个解决方案是使用一些Application类属性来确定ClicOnce在哪里安装了我的程序实例。但请注意,有些程序在卸载时会被删除。

// To get the path for the executable file that started the application, not including the executable name. 
PATH_RESOURCES = Application.StartupPath ; 

对于持续性的数据,我创建喜欢特定路径引用:

PATH_USERDATA = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\myAppName\"; 
     if (!System.IO.Directory.Exists((string)PATH_USERDATA)) 
     { 
      System.IO.Directory.CreateDirectory((string)PATH_USERDATA); 
     } 


PATH_REPORTS = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\myAppName\"; 
     if (!System.IO.Directory.Exists((string)PATH_REPORTS)) 
     { 
      System.IO.Directory.CreateDirectory((string)PATH_REPORTS); 
     } 

如果你已经添加文件到您的项目中,为“建设行动”,“内容”,并设置“属性复制到输出目录“到”始终复制“。这样,这些文件将包含在您的部署中。当应用程序运行时,检索程序集的位置并查找与它们包含在项目中相同的相关文件夹。例如,如果它们位于构建输出目录(/ bin/debug /或/ bin/release /)的顶层文件夹中,它们将与可执行文件包含在相同的文件夹中,您可以使用它发现它:

System.Reflection.Assembly.GetExecutingAssembly()。位置