c # WPF - доступ к файлу запрещен - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь создать MSI-файл для моего wpf-решения через InstallShield и внутри этого WPF-решения. Я пытаюсь получить доступ к .rtf-файлу с помощью этого кода:

 string rtfFilePath = @"Help.rtf";

using (var fs = new FileStream(rtfFilePath, FileMode.Open)){ ... }

В режиме отладкиработает нормально, но когда я уже создал MSI-файл, запустите MSI-файл и установите его на своем компьютере по пути к C: / Program Files / Company_Name / Project_Name и запустите исполняемый файл программы с файлом RTF в том же каталоге /папка, в которой также находится исполняемый файл.

Я получаю сообщение об исключении «Доступ к пути C: / Program Files / Company_Name / Project_Name \ Help.rtf 'запрещен».

И исключение средства просмотра событий:

Описание: процесс был прерван из-за необработанного исключения.Информация об исключении:

System.UnauthorizedAccessException
   at System.IO.__Error.WinIOError(Int32, System.String)
   at System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)
   at System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean)
   at System.IO.FileStream..ctor(System.String, System.IO.FileMode)
  at System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
   at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
   at System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs)
   at System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr, System.Windows.Input.InputMode, Int32, System.Windows.Input.RawMouseActions, Int32, Int32, Int32)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr, MS.Internal.Interop.WindowMessage, IntPtr, IntPtr, Boolean ByRef)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.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.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at Project_Name.App.Main()

Чего мне так не хватает?

1 Ответ

0 голосов
/ 21 сентября 2018

Для правильного доступа Program Files требуется доступ администратора, поэтому вы должны запускать программу от имени администратора.

Вы можете настроить программу на использование привилегий администратора при выполнении, для этого см. Следующий вопрос: Как заставить мое приложение .NET запускаться от имени администратора?

PS: обратите внимание, что, если возможно, вы можете избежать доступа к закрытым областям, таким как Program Files, и тогда вам не нужно будет предоставлять эту привилегию..

...