我需要在控制台ClickOnce .application
(可执行文件)所在的同一文件夹中写入一个文件。从中启动它的文件夹。
我尝试使用Application.StartupPath
& Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
,但路径指向c:\Documents & Settings
下的一个子文件夹。如何获取.application
所在的路径?
发布于 2012-02-23 05:31:56
要找到文件夹位置,您可以只运行应用程序,打开任务管理器(CTRL-SHIFT-ESC),选择应用程序,然后右键单击|打开文件位置。
发布于 2014-11-23 06:13:38
我使用Assembly.GetExecutingAssembly().Location
获取.Net 4.5.1中ClickOnce
部署的应用程序的路径。
但是,无论部署方法是什么(xcopy、ClickOnce、InstallShield等),都不应该写入应用程序部署到的任何文件夹,因为这些通常对应用程序是只读的,特别是在较新的Windows版本和服务器环境中。
应用程序必须始终写入为此类用途保留的文件夹。您可以从Environment.SpecialFolder枚举开始获取所需的文件夹。MSDN页面解释了每个文件夹的用途:http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
即,对于数据、日志和其他文件,可以使用ApplicationData
(漫游)、LocalApplicationData
(本地)或CommonApplicationData
。对于临时文件,请使用Path.GetTempPath
或Path.GetTempFileName
。
上述方法也适用于服务器和台式机。
编辑:在主可执行文件中调用Assembly.GetExecutingAssembly()
。
发布于 2019-07-31 00:27:29
假设问题是关于在ClickOnce之后访问应用程序文件夹中的文件(真正的== System.Deployment.ApplicationDeploy.IsNetworkDeployed)应用程序安装在用户的PC上,有三种方法可以通过应用程序本身获取该文件夹:
String path1 = System.AppDomain.CurrentDomain.BaseDirectory;
String path2 = System.IO.Directory.GetCurrentDirectory();
String path3 = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; //Remove the last path component, the executing assembly itself.
它们可以在VS和部署/安装的ClickedOnce应用程序中工作,不需要“真正的== System.Deployment.ApplicationDeploy.IsNetworkDeployed”检查“。ClickOnce拾取Visual Studio2017项目中包含的任何文件,因此应用程序可以使用应用程序中的相对路径访问任何和所有已部署的文件。
它基于Windows 10和Visual Studio 2017
https://stackoverflow.com/questions/2359026
复制相似问题