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

C# 安装程序项目自定义操作-指定工作目录,c#,visual-studio,windows-installer,visual-studio-setup-proje,C#,Visual Studio,Windows Installer,Visual Studio Setup Proje,我有一个自定义操作,作为VisualStudio安装程序项目部署运行 是否可以相对于安装目录指定此自定义操作的工作目录 编辑 澄清 我有一个安装程序项目,它以自定义操作运行程序。我想从安装程序项目中指定该程序的工作目录,因此当程序在安装过程中运行时,它将使用我在创建安装程序时指定的工作目录运行。工作目录:这是EXE自定义操作吗?Visual Studio安装程序项目中的自定义操作在系统上下文的延迟模式下运行,这意味着它们作为系统运行。老实说,我不确定这会对“工作文件夹造成什么影响。”。我认为这仅

我有一个自定义操作,作为VisualStudio安装程序项目部署运行

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

编辑

澄清

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

工作目录:这是EXE自定义操作吗?Visual Studio安装程序项目中的自定义操作在系统上下文的延迟模式下运行,这意味着它们作为系统运行。老实说,我不确定这会对“
工作文件夹造成什么影响。”。我认为这仅仅意味着工作文件夹就是运行可执行文件的地方

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

自定义操作:允许您运行路径引用目录的EXE文件
。您需要使用Orca或热修复输出MSI。尽管我没有尝试过,WiX应该能够做你想做的事情——就像所有其他主要的商业选择一样


热修复:热修复MSI有些复杂,这意味着您必须向和添加条目。如果二进制文件是安装后要运行的文件,或者是磁盘上已经存在的文件,则不需要将其添加到二进制表中。您需要为自定义操作列
Type
设置许多标志,这些标志与操作是同步运行还是异步运行、是否要在出错时中止、它将以什么顺序运行以及诸如此类的内容有关。您可以组合位字段。

您可以通过命令行参数将工作目录传递到程序中,但前提是程序设计为接受该值并将其用作其工作目录。或者,程序可以使用如下代码派生其运行目录:

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

一般的问题是,当程序从(比如)双击运行时,explorershell会将工作目录设置为宿主目录。Windows安装程序不会这样做

您有一个Visual Studio安装程序项目,其中包含一个自定义操作,您希望该自定义操作确定其工作目录吗?或者,您在另一个MSI?@SteinÅsmul中运行一个使用Visual STudio安装程序项目制作的MSI,作为自定义操作,并进行了澄清编辑。