用于设置脚本文件路径的Visual Studio安装程序
本文关键字:Visual Studio 安装 程序 路径 设置 脚本 文件 用于 | 更新日期: 2023-09-27 18:26:04
我有一个Visual Studio安装程序,用于安装承载Web服务的Windows服务。
我试图解决的问题是,在安装过程中,让用户可以选择特定脚本在盒子上的位置,一旦他们设置了位置,就可以将位置更新到应用程序可以使用的app.config文件。
在安装过程中,我添加了一个自定义文件夹,并将文件添加到该文件夹中。所有这些都已安装。我想将其保留为默认值,但可以用用户的新选择覆盖它。
我添加了一个用户界面和一个文本框来捕捉用户的选择,以及一个安装程序类,但当我尝试时,它失败了。它失败的地方是当它试图找到我的App.Config文件时。它说找不到它。在我的代码中,我写了:
string path = Assembly.GetExecutingAssembly().Location;
因此,对我来说,当安装正在运行时,我的app.config还没有安装到这个位置。
所以,有人能告诉我如何覆盖和保存新位置吗。
感谢
由于多种原因,您所做的工作不起作用。
-
VS安装项目中的自定义操作在安装完所有文件后运行,因此选择可以安装文件的文件夹为时已晚。UI应该位于正常向导UI表单运行的前端,但VS设置不支持自定义对话框。
-
带有UI的安装程序类往往会做一些奇怪的事情,因为它们是从MSI中的执行序列中调用的,而单元线程不起作用。
-
您不是在交互式用户环境中运行的。您的安装程序类是从使用系统上下文运行的msiexec进程中调用的。如果需要加载文件,请显式命名路径。
如果你要坚持使用Visual Studio设置,最好的办法是将脚本安装到正常的默认位置,并让你的应用程序提供一种将其复制到某个地方的方法。然后,用户可以随时将其复制到新的位置,并且您在正常的用户环境中运行。
您无法使用获取安装MSI的目录完整路径
string path = Assembly.GetExecutingAssembly().Location;
上面的代码可能会返回一个路径C:'Windows'System32
,该路径具有处理MSI安装的msiexec.exe位置。在安装程序类中使用以下代码来获取安装路径。
string installationPath = Context.Parameters["assemblypath"];
您的其他问题不清楚
Folks
我自己设法解决了这个问题。
我在安装程序类中添加了一个安装后事件。在这个事件中,我添加了这行代码
string assembley = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(assembley);
string path = Uri.UnescapeDataString(uri.Path);
string directory = Path.GetDirectoryName(path);
为了得到配置文件-我做了这个
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(ProjectInstaller)).Location);
这给了我想要的东西,它可以工作