场景:我创建了一个库项目,它为安装程序提供接口(使用安装屏蔽创建的 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.dll3). Assembly.GetExecutingAssembly().Location// 返回空字符串4). AppDomain.CurrentDomain.BaseDirectory// 无论实际路径如何,都返回“C:\Windows\syswow64\”谁能告诉我如何从执行安装程序的位置获取目录路径?
3 回答

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