c# Process 使用ProcessStartInfo方式启动qt quick应用程序失败

    最近着手一个c#项目, 在此项目的一个模块中使用c#启动外部qt quick exe, 原来启动的第三方程序是个c#窗口程序, 启动是正常的,现在目标是启动其他的第三方程序, 不巧此程序是windows下qt quick程序,反编译启动程序得到c#代码后, 修改了目标启动程序为qt quick程序,结果重新编译成功后一直出发不了qt quick程序,查找到c#中启动程序的代码段为:

using (Process process = new Process()) {
                    var s = System.IO.Path.Combine(workPath, exeName);
                    p.StartInfo.FileName = s;
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardInput = true;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.RedirectStandardError = true;
                    p.StartInfo.CreateNoWindow = false;
                    p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
                    p.Start();

}

将整个项目程序重新运行一遍,在任务管理器中发现qt quick程序是有启动的,不过启动没几秒就自动关闭了, 初看下还以为是其他模块因为达成某种条件触发了主动关闭qt quick程序的事件,但是实际上并没有这样的处理。 这种情况只能是qt quick程序自己异常退出了,windows下只能看看是否可以拿到qt quick程序的dump文件, 然后再分析!有一个工具是可以捕捉windows系统下大部分软件异常退出的dump文件的, 不过因为时间的原因就不打算做这样的处理, 根据经验来看很有可能是qt quick程序因为缺少了依赖库, 于是索性把目标qt quick 程序开发工程中打包好的所有依赖都拷贝到启动程序的同一个目录下,重新测试发现还是启动不了, 于是将之前的那段启动代码改成下面这样:

using (Process process = new Process()){
                    string fileName = Path.Combine(workPath, exeName);
                    process.StartInfo.FileName = fileName;
                    process.StartInfo.UseShellExecute = true;
                    process.StartInfo.CreateNoWindow = false;
                    process.StartInfo.WorkingDirectory = workPath;
                    process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                    process.Start();
                    result = true;
}

手动设置了qt quick 程序的工作目录, 重新运行还是不行, 还是启动了一会就会自动关闭。想了一下, 项目中启动程序其实也是由其他程序启动的, 项目中多个模块的是链式启动的, 一环一环下来, 根据经验, 将qt quick程序重新编译为管理员权限启动, 再放到启动程序目录下, 重新测试, 启动成功!汗~ 如果程序中有读写了计算机中的文件、数据库, 最好能给程序管理员权限运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值