安装程序项目自定义操作-指定工作目录

时间:2018-09-24 12:10:55

标签: c# visual-studio windows-installer visual-studio-setup-proje

我有一个自定义操作,可以作为Visual Studio Installer项目部署来运行。

是否可以相对于安装目录指定此自定义操作的工作目录?

修改

要澄清

我有一个安装程序项目,该程序以自定义操作的形式运行程序。我想从安装程序项目中指定该程序的工作目录,因此,当程序在安装过程中运行时,它将与创建安装程序时指定的工作目录一起运行。

2 个答案:

答案 0 :(得分:0)

工作目录 :这是EXE自定义操作吗? Visual Studio Installer项目中的自定义操作在 deferred mode, system context 中运行-表示它们以 System / LocalSystem 运行>。老实说,我不确定这会对“ working folder ”产生什么影响。我认为这只是意味着工作文件夹位于可执行文件运行所在的位置。

VS安装程序项目限制 :Visual Studio安装程序项目无法完全配置高级设置。有一种方法可以运行EXE文件并指定工作文件夹,但这些项目不支持该方法。我也不确定在我们知道您的实际运行之前,是否可以解决您的问题。可能是脚本。 There are several major problems with these installer projects

自定义操作 A Type 34 Custom Action允许您Run an EXE file having a path referencing a directory。您要么需要使用Orca或use a real-deployment tool such as WiX or an equivalent commercial options来修复输出MSI。尽管我没有尝试过,但是WiX应该能够执行您想要的操作-以及所有其他主要的商业选择。

修补程序 :MSI修补程序有些复杂,这意味着您必须向CustomAction TableInstallExecuteSequence Table添加条目。如果二进制文件是要在安装后运行的文件,或者是磁盘上已经存在的文件,则无需将二进制文件添加到二进制表。您需要为自定义操作列 Type 设置许多标志,这些标志与操作是同步运行还是异步运行,是否要因错误中止而定,以什么顺序它会在其中运行。您组合位字段。

答案 1 :(得分:0)

您可以通过命令行参数将工作目录传递到程序中,但前提是程序设计为采用该值并将其用作其工作目录。另外,程序也可以使用以下代码导出其运行目录:

> public static string GetAssemblyPathByCodeBase() {
>     string codeBase = Assembly.GetExecutingAssembly().CodeBase;
>     UriBuilder uri = new UriBuilder(codeBase);
>     return Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path)); }

一般的问题是,从(例如)双击运行程序时,Explorer Shell将工作目录设置为托管目录。 Windows Installer不会这样做。