繁体   English   中英

C#如何获取当前目录路径

[英]C# How to get current directory path

场景:我创建了一个库项目,它为安装程序提供接口(使用安装屏蔽创建的 exe)。我想检查安装程序文件夹中是否存在特定文件。

我试过以下:

1).  Assembly.GetEntryAssembly().Location

// 抛出“未将对象引用设置为对象的实例”

2). new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath

// 返回:C:\\Windows\\Microsoft.Net\\assembly\\GAC_32\\mscorlib\\v4.0_4.0.0.0__b77a5c561934e089\\mscorlib.dll

3). Assembly.GetExecutingAssembly().Location

// 返回空字符串

4). AppDomain.CurrentDomain.BaseDirectory

// 不考虑实际路径,返回“C:\\Windows\\syswow64\\”

谁能告诉我如何从执行安装程序的位置获取目录路径?

您可以使用

Directory.GetCurrentDirectory();

获取当前目录路径

导入System.IO

我将回答我自己的问题,无法从库项目中获取当前路径。 您必须从安装程序中获取它。 没有其他办法。

谢谢你。

如果您想获取您的 exe 所在的文件夹

AppDomain.CurrentDomain.BaseDirectory

这将返回包含 exe 的文件夹的整个路径。 从那里您可以手动添加文件夹

AppDomain.CurrentDomain.BaseDirectory + @"MyFolder1\MyFolder2";

假设您正在运行由 InstallShield 构建的基于 MSI 的安装:

您遇到的问题是因为这些调用的工作方式。 您正在外部 Dll 中实现此功能,而 Dll 没有自己的当前目录 - 它们具有调用 Dll 的进程的当前目录。 在这种情况下,您是从 msiexec.exe 进程调用的(假设您是在自定义操作中执行此操作),因此您将获得 msiexec.exe 的当前目录。

除此之外,还有一些其他的观察:

  1. 您没有确切说明何时调用代码,但可能是在用户选择安装文件夹之前,因此搜索并没有真正的帮助。

  2. InstallShield 可能提供对文件搜索的支持。 如果这是 MSI 设置,它肯定可以。

  3. 安装几乎不会在安装文件夹中查找文件,因为很少有充分的理由。 如果您需要该文件,请将其添加到您的安装中,或者如果它是可再发行的,则添加标准的 redist 包,可能是一个合并模块。 如果该文件属于另一个设置,如果该产品被卸载,您会怎么做? 您是否正在检查版本以查看它是否与您的应用程序兼容? 一般来说,所有设置都会安装他们需要的文件,如果共享文件被多个不同的产品使用,则它们向后兼容。

试试这个,它总是对我有用:

Environment.CurrentDirectory

使用上述属性如下。

string currentDirectory = Path.GetDirectoryName(Environment.CurrentDirectory);

如果你想在 InstallShield 中使用这个路径

Setup.exe - 使用 SETUPEXEDIR 属性

http://www.installshield.com/news/newsletter/0206-articles/SetupExeDir.asp

根据您使用的 installshield 版本,尝试不同的属性

1. SRCDIR

2. 设置目录

3. 支持目录

如果你有一个 C# 代码来读取 preperties 使用 MsiGetProperty 像下面

MsiGetProperty( hMSI, "SETUPEXEDIR", Value, Size )

string assemblyPath = Context.Parameters["assemblyPath"];
int i = assemblyPath.Length - 1;
while (assemblyPath[i] != '\\') --i;
string folder = assemblyPath.Substring(0, i);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM