定义文件的安装位置

时间:2013-02-16 04:14:56

标签: c# .net installation clickonce

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

4 个答案:

答案 0 :(得分:2)

我发现一个解决方案是使用一些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 );
        }

答案 1 :(得分:1)

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

在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键,这样您就可以通过查看注册表确切了解应用程序路径的位置

答案 2 :(得分:0)

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

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

嗯,如上所述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();

无论如何,花了我一个小时才找到这个,所以希望它可以帮助其他人。

答案 3 :(得分:0)

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

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