yourtablecloth / TableCloth

식탁보 프로젝트
GNU Affero General Public License v3.0
883 stars 54 forks source link

[1.12.2] 샌드박스에서 Microsoft Edge 브라우저 설치가 누락된 경우에 대한 대응 #184

Open rkttu opened 4 months ago

rkttu commented 4 months ago

원인을 명확히 알 수는 없으나, Microsoft Edge가 샌드박스 안에 제대로 설치되지 않은 경우가 드물게 발생하는 것으로 보임.

Windows Sandbox 안에서는 Microsoft Edge를 강제 설치하기 위해 충분한 권한을 얻을 수 없기 때문에, 다음의 우회책을 적용하는 것을 검토한다.

참고: 관련 스택 추적 기록

System.ComponentModel.Win32Exception: 응용 프로그램을 찾을 수 없습니다
  ?, in bool Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
  ?, in Process Process.Start(ProcessStartInfo startInfo)
  File "Components\Implementations\StepsPlayer.cs", line 251, col 13, in async Task StepsPlayer.OpenRequestedWebSiteAsync(string targetUrl, CancellationToken cancellationToken)
  File "Components\Implementations\StepsPlayer.cs", line 88, col 38, in async Task<bool> StepsPlayer.PlayStepsAsync(IEnumerable<InstallItemViewModel> composedSteps, bool dryRun, CancellationToken cancellationToken)
  File "Commands\MainWindow\MainWindowInstallPackagesCommand.cs", line 29, col 13, in async Task MainWindowInstallPackagesCommand.ExecuteAsync(MainWindowViewModel viewModel)
  ?, in async void SafeFireAndForgetExtensions.HandleSafeFireAndForget<TException>(Task task, bool continueOnCapturedContext, Action<TException> onException)
  ?, in object ExceptionWrapper.InternalRealCall(Delegate callback, object args, int numArgs)
  ?, in object ExceptionWrapper.TryCatchWhen(object source, Delegate callback, object args, int numArgs, Delegate catchHandler)
  ?, in void DispatcherOperation.InvokeImpl()
  ?, in void CulturePreservingExecutionContext.CallbackWrapper(object obj)
  ?, in void CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, object state)
  ?, in void DispatcherOperation.Invoke()
  ?, in void Dispatcher.ProcessQueue()
  ?, in IntPtr Dispatcher.WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
  ?, in IntPtr HwndWrapper.WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
  ?, in object HwndSubclass.DispatcherCallbackOperation(object o)
  ?, in object ExceptionWrapper.InternalRealCall(Delegate callback, object args, int numArgs)
  ?, in object ExceptionWrapper.TryCatchWhen(object source, Delegate callback, object args, int numArgs, Delegate catchHandler)
  ?, in object Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, object args, int numArgs)
  ?, in IntPtr HwndSubclass.SubclassWndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam)
  ?, in IntPtr UnsafeNativeMethods.DispatchMessage(in MSG msg)
  ?, in void Dispatcher.PushFrameImpl(DispatcherFrame frame)
  ?, in object Application.RunDispatcher(object ignore)
  ?, in int Application.RunInternal(Window window)
  File "Program.cs", line 36, col 9, in void Program.RunApp(string[] args)
  File "Program.cs", line 26, col 16, in void Program.Main(string[] args)
rkttu commented 4 months ago

확인해볼 부분: Microsoft Edge Enterprise MSI 파일을 설치 과정 중에 대신 사용할 수 있는지 확인 필요.