fix: 修复非Nvidia环境下无法启动

master
Tongg 4 months ago
parent e2569f11e5
commit e3c6590e0a
  1. 86
      LoginWindow.xaml.cs

@ -28,55 +28,65 @@ public partial class LoginWindow : Window
private void checkNvidia() private void checkNvidia()
{ {
string nvidiaVersion = ""; string nvidiaVersion = "";
using (Process process = new Process()) try
{ {
process.StartInfo.FileName = "nvidia-smi"; using (Process process = new Process())
process.StartInfo.Arguments = "--query-gpu=driver_version --format=csv,noheader,nounits"; {
process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = "nvidia-smi";
process.StartInfo.CreateNoWindow = true; process.StartInfo.Arguments = "--query-gpu=driver_version --format=csv,noheader,nounits";
process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true; process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
// 使用StringBuilder来捕获输出和错误信息 // 使用StringBuilder来捕获输出和错误信息
StringBuilder outputBuilder = new StringBuilder(); StringBuilder outputBuilder = new StringBuilder();
StringBuilder errorBuilder = new StringBuilder(); StringBuilder errorBuilder = new StringBuilder();
process.OutputDataReceived += (sender, e) => process.OutputDataReceived += (sender, e) =>
{ {
if (e.Data != null) if (e.Data != null)
outputBuilder.AppendLine(e.Data); outputBuilder.AppendLine(e.Data);
}; };
process.ErrorDataReceived += (sender, e) => process.ErrorDataReceived += (sender, e) =>
{ {
if (e.Data != null) if (e.Data != null)
errorBuilder.AppendLine(e.Data); errorBuilder.AppendLine(e.Data);
}; };
process.Start(); process.Start();
// 开始异步读取输出和错误流 // 开始异步读取输出和错误流
process.BeginOutputReadLine(); process.BeginOutputReadLine();
process.BeginErrorReadLine(); process.BeginErrorReadLine();
process.WaitForExit(); process.WaitForExit();
// 获取完整的输出和错误信息 // 获取完整的输出和错误信息
string outputMsg = outputBuilder.ToString(); string outputMsg = outputBuilder.ToString();
string errorMsg = errorBuilder.ToString(); string errorMsg = errorBuilder.ToString();
nvidiaVersion = (string.IsNullOrWhiteSpace(errorMsg)?outputMsg:errorMsg).Trim(); nvidiaVersion = (string.IsNullOrWhiteSpace(errorMsg) ? outputMsg : errorMsg).Trim();
if (process.ExitCode == 0 || !string.IsNullOrWhiteSpace(nvidiaVersion)) if (process.ExitCode == 0 || !string.IsNullOrWhiteSpace(nvidiaVersion))
{ {
if (CompareVersions(nvidiaVersion, "528.33") <= 0) if (CompareVersions(nvidiaVersion, "528.33") <= 0)
{
MessageBox messageBox = new MessageBox();
messageBox.Show(MultilingualHelper.getString("NotNvidiaVersionLow")
.Replace("%version", nvidiaVersion));
}
}
else
{ {
MessageBox messageBox = new MessageBox(); MessageBox messageBox = new MessageBox();
messageBox.Show(MultilingualHelper.getString("NotNvidiaVersionLow").Replace("%version", nvidiaVersion)); messageBox.Show(MultilingualHelper.getString("NotNvidia"));
} }
} }
else }
{ catch (Exception ex)
MessageBox messageBox = new MessageBox(); {
messageBox.Show(MultilingualHelper.getString("NotNvidia")); Logger.Error(ex.Message);
} MessageBox messageBox = new MessageBox();
messageBox.Show(MultilingualHelper.getString("NotNvidia"));
} }
} }

Loading…
Cancel
Save