猿问

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\”

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


拉丁的传说
浏览 285回答 3
3回答

呼如林

您可以使用Directory.GetCurrentDirectory();获取当前目录路径进口 System.IO

凤凰求蛊

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

四季花海

假设您正在运行由 InstallShield 构建的基于 MSI 的安装:您遇到的问题是因为这些电话的工作方式。您在外部 Dll 中实现此功能,并且 Dll 没有自己的当前目录 - 它们具有调用 Dll 的进程的当前目录。在这种情况下,您从 msiexec.exe 进程中被调用(假设您在自定义操作中执行此操作),因此您将获得 msiexec.exe 的当前目录。除此之外,还有一些其他的观察:您没有准确说明何时调用代码,但可能是在用户选择安装文件夹之前,因此搜索并没有真正帮助。InstallShield 可能提供对文件搜索的支持。如果这是一个 MSI 设置,它肯定会。安装很少会在安装文件夹中查找文件,因为很少有充分的理由。如果您需要该文件,请将其添加到您的安装中,或者如果它是可再发行的,则添加标准的 redist 包,也许是一个合并模块。如果该文件属于另一个设置,如果该产品被卸载,您会怎么做?您是否正在检查版本以查看它是否与您的应用程序兼容?一般来说,所有设置都会安装他们需要的文件,如果共享文件被多个不同的产品使用,则它们是向后兼容的。
随时随地看视频慕课网APP
我要回答