gpt4 book ai didi

c# - 如何解决此 System.IO.FileNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 17:39:10 26 4
gpt4 key购买 nike

  • 错误只发生在生产中(不在调试中)。
  • 该错误仅发生在 Windows 登录后运行的第一个应用程序上。
  • 错误发生在我们单击 BtnUseDesktop 并因此触发 BtnUseDesktop_Click 事件(如下)时。
  • 事件查看器堆栈以 The.Application.Name.Main() 方法开始...
  • 但是我们的代码没有那个方法(它是一个 WPF 应用程序)。

事件查看器

 Application: The.Application.Name.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:

at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(
System.Object, System.Delegate, System.Object, Int32, System.Delegate)

at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(
System.Windows.Threading.DispatcherPriority, System.TimeSpan,
System.Delegate, System.Object, Int32)

at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)

at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)

at System.Windows.Threading.Dispatcher.PushFrameImpl(
System.Windows.Threading.DispatcherFrame)

at System.Windows.Threading.Dispatcher.PushFrame(
System.Windows.Threading.DispatcherFrame)

at System.Windows.Threading.Dispatcher.Run()

at System.Windows.Application.RunDispatcher(System.Object)

at System.Windows.Application.RunInternal(System.Windows.Window)

at System.Windows.Application.Run(System.Windows.Window)

at The.Application.Name.Main()

BtnUseDesktop_Click

private void BtnUseDesktop_Click(object sender, RoutedEventArgs e)
{
AvSwitcher switcher = new AvSwitcher();
this.RunAsyncTask(() =>
switcher.SwitchToDesktop(this.windowSyncSvc.ActiveLyncWindowHandle));
}

点击事件调用的AvSwitcher

public class AvSwitcher
{
private DeviceLocationSvc deviceLocationSvc;
private UIAutomationSvc uiAutomationSvc;
private WindowMovingSvc windowMovingSvc;
private ManualResetEvent manualResetEvent;
private Modality audioVideo;
public static bool IsSwitching { get; set; }

public AvSwitcher()
{
this.deviceLocationSvc = new DeviceLocationSvc();
this.uiAutomationSvc = new UIAutomationSvc();
this.windowMovingSvc = new WindowMovingSvc();
}

public void SwitchToDesktop(IntPtr activeLyncConvWindowHandle)
{
this.BeginHold(DeviceLocation.Desktop, activeLyncConvWindowHandle);
}

public void SwitchToWall(IntPtr activeLyncConvWindowHandle)
{
this.BeginHold(DeviceLocation.Wall, activeLyncConvWindowHandle);
}

private Conversation GetLyncConversation()
{
Conversation conv = null;
if (LyncClient.GetClient() != null)
{
conv = LyncClient.GetClient().ConversationManager.Conversations.FirstOrDefault();
}

return conv;
}

private void BeginHold(DeviceLocation targetLocation, IntPtr activeLyncConvWindowHandle)
{
AvSwitcher.IsSwitching = true;

// make sure the class doesn't dispose of itself
this.manualResetEvent = new ManualResetEvent(false);

Conversation conv = this.GetLyncConversation();
if (conv != null)
{
this.audioVideo = conv.Modalities[ModalityTypes.AudioVideo];
ModalityState modalityState = this.audioVideo.State;

if (modalityState == ModalityState.Connected)
{
this.HoldCallAndThenDoTheSwitching(targetLocation, activeLyncConvWindowHandle);
}
else
{
this.DoTheSwitching(targetLocation, activeLyncConvWindowHandle);
}
}
}

private void HoldCallAndThenDoTheSwitching(
DeviceLocation targetLocation,
IntPtr activeLyncConvWindowHandle)
{
try
{
this.audioVideo.BeginHold(
this.BeginHold_callback,
new AsyncStateValues()
{
TargetLocation = targetLocation,
ActiveLyncConvWindowHandle = activeLyncConvWindowHandle
});
this.manualResetEvent.WaitOne();
}
catch (UnauthorizedAccessException)
{
// the call is already on hold
this.DoTheSwitching(targetLocation, activeLyncConvWindowHandle);
}
}

private void BeginHold_callback(IAsyncResult ar)
{
if (ar.IsCompleted)
{
DeviceLocation targetLocation = ((AsyncStateValues)ar.AsyncState).TargetLocation;
IntPtr activeLyncConvWindowHandle =
((AsyncStateValues)ar.AsyncState).ActiveLyncConvWindowHandle;
this.DoTheSwitching(targetLocation, activeLyncConvWindowHandle);
}

Thread.Sleep(2000); // is this necessary
this.audioVideo.BeginRetrieve(this.BeginRetrieve_callback, null);
}

private void DoTheSwitching(DeviceLocation targetLocation, IntPtr activeLyncConvWindowHandle)
{
DeviceLocationSvc.TargetDevices targetDevices =
this.deviceLocationSvc.GetTargetDevices(targetLocation);

this.SwitchScreenUsingWinApi(targetDevices.Screen, activeLyncConvWindowHandle);
this.SwitchVideoUsingLyncApi(targetDevices.VideoDevice);
this.SwitchAudioUsingUIAutomation(
targetDevices.MicName,
targetDevices.SpeakersName,
activeLyncConvWindowHandle);

AvSwitcher.IsSwitching = false;
}

private void SwitchScreenUsingWinApi(Screen targetScreen, IntPtr activeLyncConvWindowHandle)
{
if (activeLyncConvWindowHandle != IntPtr.Zero)
{
WindowPosition wp =
this.windowMovingSvc.GetTargetWindowPositionFromScreen(targetScreen);
this.windowMovingSvc.MoveTheWindowToTargetPosition(activeLyncConvWindowHandle, wp);
}
}

private void SwitchVideoUsingLyncApi(VideoDevice targetVideoDevice)
{
if (targetVideoDevice != null)
{
LyncClient.GetClient().DeviceManager.ActiveVideoDevice = targetVideoDevice;
}
}

private void SwitchAudioUsingUIAutomation(
string targetMicName,
string targetSpeakersName,
IntPtr activeLyncConvWindowHandle)
{
if (targetMicName != null && targetSpeakersName != null)
{
AutomationElement lyncConvWindow =
AutomationElement.FromHandle(activeLyncConvWindowHandle);

AutomationElement lyncOptionsWindow =
this.uiAutomationSvc.OpenTheLyncOptionsWindowFromTheConvWindow(lyncConvWindow);

this.uiAutomationSvc.SelectTheTargetMic(lyncOptionsWindow, targetMicName);

this.uiAutomationSvc.SelectTheTargetSpeakers(lyncOptionsWindow, targetSpeakersName);

this.uiAutomationSvc.InvokeOkayButton(lyncOptionsWindow);
}
}

private void BeginRetrieve_callback(IAsyncResult ar)
{
this.audioVideo.EndRetrieve(ar);
this.manualResetEvent.Set(); // allow the program to exit
}

private class AsyncStateValues
{
internal DeviceLocation TargetLocation { get; set; }

internal IntPtr ActiveLyncConvWindowHandle { get; set; }
}
}

最佳答案

我不想指出显而易见的事情,但是 System.IO.FileNotFoundException表示程序没有找到您指定的文件。所以你需要做的是检查你的代码在生产中寻找的文件。

要查看您的程序在生产环境中查找的文件(查看异常的 FileName 属性),请尝试以下技术:

然后查看机器上的文件系统,看文件是否存在。最有可能的情况是它不存在。

关于c# - 如何解决此 System.IO.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22774135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com