【问题标题】:Installer Project Custom Actions - Specify working directory安装程序项目自定义操作 - 指定工作目录
【发布时间】:2018-09-24 12:10:54
【问题描述】:

我有一个作为 Visual Studio 安装程序项目部署运行的自定义操作。

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

编辑

澄清

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

【问题讨论】:

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

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


【解决方案1】:

工作目录:这是一个 EXE 自定义操作吗? Visual Studio 安装程序项目中的自定义操作在 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 设置许多标志,这些标志与操作是同步运行还是异步运行、是否要在出错时中止、它将按什么顺序运行有关跑进去之类的东西。你组合位域。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2019-02-22
      • 2015-09-05
      相关资源
      最近更新 更多