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



场景 : 我创建了一个库项目,它为安装程序提供接口(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 + @"MyFolder1MyFolder2";

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

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

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

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

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

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

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

Environment.CurrentDirectory

使用上述属性如下。

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

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

Setup.exe- 使用 SETUPEXEDIR 属性

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

根据您使用的安装盾版本,尝试不同的属性

1. SRCDIR

2. 安装执行

3. 支持目录

如果你有一个 C# 代码来读取准备,请使用 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);

最新更新