从设计自动化作业运行外部可执行文件?

问题描述 投票:0回答:1

目标是从 Revit DA 作业运行 C++ 可执行文件,以便使用第 3 方库进行一些网格处理。我首先研究该轨道,这样就不需要编写自定义 .Net 绑定来与 c++ 库交互...... 不幸的是我收到以下错误:

[10/04/2023 19:46:31] Exception RunMeshOptimizer: Not enough quota is available to process this command
[10/04/2023 19:46:31] StackTrace:    at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
[10/04/2023 19:46:31]    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
[10/04/2023 19:46:31]    at Keystone.DA.Revit.Net.Commands.RunMeshOptimizer(JObject opts, String inputFile, String outputFile)

c++测试代码非常简单,所以我怀疑它会消耗大量内存:

#include <iostream>
#include <fstream>  

int main(int argc, char* argv[])
{

    std::ofstream outfile("test.txt");

    outfile << "test" << std::endl;

    outfile.flush();
    outfile.close();
}

可执行文件包含在 DA 包中并从 .Net 调用,如下所示:

var asm = Assembly.GetExecutingAssembly();

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.CreateNoWindow = false;
startInfo.FileName = Path.Combine(Path.GetDirectoryName(asm.Location), "MeshOptimizer.exe");

using (Process exeProcess = Process.Start(startInfo))
{
   exeProcess.WaitForExit();
}

我的问题是从 DA 作业生成外部 exe 是否存在任何已知限制?

autodesk revit-api autodesk-designautomation
1个回答
0
投票

一般来说,应该可以在 Design Automation 服务器上运行自定义程序: 在 WorkItem 中运行其他程序
该问题可能特定于从 Revit 应用程序包 内部运行 exe(团队将对此进行调查)并在 RevitCoreConsole 完成后运行它应该没问题。 我确实检查了在

DA4R

服务器上运行自定义 exe,这对我来说效果很好: 所以,我想您可以将自定义的

exe

作为 commandLine 数组中的第二项运行。这是我上面引用的博客文章中的第一个解决方案 - 类似: "commandLine": [ "$(engine.path)\\RevitCoreConsole.exe /al \"$(appbundles[MyBundle].path)\"", "\"$(appbundles[MyBundle].path)\\MyBundlePlugin.bundle\\Contents\\MeshOptimizer.exe\"" ]

© www.soinside.com 2019 - 2024. All rights reserved.