我目前正在开发一个来自 Visual Studio 的 Winforms 程序,它充当一大堆 TeraTerm 宏的控制面板。我做了一个愚蠢的事情,没有将我的第一个工作版本添加到版本控制中,现在它停止工作了,我不知道为什么/如何恢复我所拥有的。
功能是问题是
using System;
using System.IO.Ports;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Diagnostics;
...
namespace Test
{
public partial class MainWindow : Form
{
...
private void ImagesButton_Click(object sender, EventArgs e)
{
RunMacro("F:\\Users\\Isaac\\Documents\\LED Sign Commands\\Macros\\StartDisplayImages.ttl");
}
....
private void RunMacro(string userArgument)
{
panel1.Enabled = false;
StatusLabel.Visible = true;
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo()
{
WindowStyle = ProcessWindowStyle.Hidden,
#if DEBUG
FileName = "F:\\Users\\Isaac\\Documents\\LED Sign Commands\\teraterm\\ttpmacro.exe",
#else
FileName = "..\\teraterm\\ttpmacro.exe",
#endif
Arguments = userArgument
};
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
panel1.Enabled = true;
StatusLabel.Visible = false;
}
...
}
}
运行时,我看到它ttpmacro.exe
确实开始了,如果我省略了Arguments
赋值,那么它会提示我选择一个宏;如果我选择StartDisplayImages.ttl
,它将按预期运行。但是,如果我将它作为上述参数包含在内,那么ttpmacro
仍然会打开但会立即关闭。没有错误出现(并且RedirectStandardOutput/Error
什么也没有产生),就好像ttpmacro
接受了文件但不会对它做任何事情。我已经确认两个文件路径都是有效且正确的。
虽然我没有添加版本控制,但我确实使用 ILSpy 提取了主文件,并且我在工作版本中的原始功能是:
private void ImagesButton_Click(object sender, EventArgs e)
{
RunMacro("/V ..\\Macros\\StartDisplayImages.ttl");
}
private void RunMacro(string userArgument)
{
panel1.Enabled = false;
StatusLabel.Visible = true;
Process process = new Process();
ProcessStartInfo startInfo = (process.StartInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "..\\teraterm\\ttpmacro.exe",
Arguments = userArgument
});
process.Start();
process.WaitForExit();
panel1.Enabled = true;
StatusLabel.Visible = false;
}
来自已发布的版本,文件路径是相对于应用程序的文件夹的。除此之外,唯一的区别似乎是如何分配 process.StartInfo 的小语法,但我尝试恢复它没有运气。目标框架是 .NET Core 3.1。旗帜/V
不是问题。删除它只会使ttpmacro
窗口在关闭前运行的几分之一秒内可见。如果我使用同一文件的命令行执行(例如start "F:/Users/.../ttpmacro.exe" "F:/.../StartDisplayImages.ttl"
),它也会按预期运行。