代码之家  ›  专栏  ›  技术社区  ›  Sergey Kolesnik

将stdout从可执行自定义操作重定向到MSI日志

  •  0
  • Sergey Kolesnik  · 技术社区  · 4 年前

    我有一个自定义操作,在msi安装程序包中运行一个可执行文件。exe被编译为控制台应用程序,并提供必要的信息。

    1. 我想把输出重定向到MSI日志文件。
    2. 我不希望在安装过程中显示控制台。

    数字 2. 我想我可以用 windows 作为一个子系统,它根本不会打开控制台。但即使我从终端(PowerShell/CMD)运行exe,也不会显示任何输出。

    数字 1. 我曾想过将可执行文件作为在自定义操作DLL中调用的子进程来运行,但这是不可能的,因为可执行文件存储在二进制表中,在需要时不会生成。此外,它将有一个随机名称。
    自定义操作的逻辑必须作为单独的进程运行。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Bogdan Mitrache    4 年前

    如果你想把自定义操作作为一个单独的进程来运行,我认为你是做不到的。我可能错了。但我从未尝试过,而且似乎/听起来不可能。

    基本上,MSIEXEC进程将拥有安装创建的日志文件的句柄,我认为您不能与单独的进程共享它。

    为什么需要使用单独的自定义操作流程?

    作为测试,您可以尝试创建一个额外的DLL自定义操作,该操作异步运行。此自定义操作的目的只是与EXE进程通信,并在日志文件中写入希望从EXE自定义操作传递的任何信息。我从未尝试过这种方法,但是如果你有时间消磨时间,并且真的需要主要逻辑来保留在EXE自定义操作中,你可以尝试一下。