我正在尝试将 .NET 应用程序部署为 ClickOnce 应用程序,但在定义应用程序的安装位置时遇到了问题。我需要知道这一点,因为我必须包含支持文件。我已经将支持文件添加为“现有项目”。我曾假设该程序将安装在 Program Files 中,但它不存在于那里。相反,桌面上只有一个快捷方式。有人可以解释使用 VS2012 定义安装路径的方式/位置吗?
4 回答
我发现的一种解决方案是使用一些 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 );
}
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 应用程序路径都不同,我发现最好的方法是让您的应用程序将自己的应用程序路径写入 reg 键,这样您可以通过查看 reg 确切地知道应用程序路径的位置。
因此,正如user831062指出的那样,ClickOnce 应用程序安装在用户配置文件下,而不是 Program Files 路径下。因此,每台机器上的安装目录都不同,几乎不可能直接访问。
我被挂断的部分是我包含在项目中的文件在哪里,更重要的是 - 我如何访问它们?
好吧,正如在此链接中提到的,如果您将文件标记为“数据文件”,则在:
Project Properties > Publish > Application Files > Publish Status
您将能够使用以下方式访问它们:
textBox = File.ReadAllLines(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\myFile.txt")).ToList();
如果您不将其标记为“数据文件”,而只是将其标记为“包含(自动)”,则它将仅位于安装目录本身中,可以通过使用以下方式直接调用文件来访问该目录:
textBox = File.ReadAllLines(@"myFile.txt")).ToList();
无论如何,我花了一个小时左右才找到这个,所以希望它可以帮助其他人。
如果您已将文件添加到项目中,请将“构建操作”的属性设置为“内容”,并将“复制到输出目录”设置为“始终复制”。这样,文件将包含在您的部署中。运行应用程序时,检索程序集的位置并在与它们包含在项目中的位置相同的相对文件夹中查找。例如,如果它们位于构建输出目录(/bin/debug/ 或 /bin/release/)的顶层文件夹中,它们将包含在与可执行文件相同的文件夹中,您可以使用以下命令发现:
System.Reflection.Assembly.GetExecutingAssembly().Location