企业建站系统模板,网站产品演示,知识付费网站建设,wordpress导航栏的文件在哪简述
在公司写代码遇到的一个坑#xff0c;我需要与下位机提供的.exe文件进行交互。此时需要我在golang中启用这个.exe文件#xff0c;然后进行通信。但是当我在使用:
path : D:/Project/utils/
cmd : exec.Command(path xxx.exe)
if err : cmd.S…简述
在公司写代码遇到的一个坑我需要与下位机提供的.exe文件进行交互。此时需要我在golang中启用这个.exe文件然后进行通信。但是当我在使用:
path : D:/Project/utils/
cmd : exec.Command(path xxx.exe)
if err : cmd.Start(); err ! nil {fmt.Errorf(the error is: %w, err)return
}
进行调用时使用powershell的 tasklist 指令可以看到 xxx.exe 进程已经被启用但是我的通信服务并不能接通。
问题解决
这里其实会涉及到的问题是关于工作目录的由于下位机的cpp程序在打包后依旧会依赖其目录中的一些 .h/.cpp 文件。所以我们如果在编码的工程目录下进行调用时.exe 文件会找不到其对应的依赖 .h/.cpp。所以我们需要先切换工程目录到.exe所在的目录下去但是由于我们是在当前目录编码所以在完成启动后还需要返回到当前工程目录来
// 记录初始目录
oldDir,_ : os.Getwd()// 切换工程目录
if err : os.Chdir(D:/Project/ExeFile); err ! nil {fmt.Errorf(the error is: %w, err)return
}// 这里调用 .exe
// 由于已经切换了工程目录直接调用即可
path : ./xxx.exe
if err : exec.Command(path); err ! nil {fmt.Errorf(the error is: %w, err)return
}// 切回初始工程目录
if err : os.Chdir(oldDir); err ! nil {fmt.Errorf(the error is: %w, err)return
}