Проблема с правами доступа FileSystemWatcher C # - PullRequest
0 голосов
/ 26 сентября 2011

Я перехожу к домену и читаю путь \\machinecap\platform\in.

Платформа является общей, что ведет к E:\cappuccino\platform локально. Приложение представляет собой службу Windows, созданную на C # .NET 2.0, которая использует FileSystemWatcher для чтения пути \\machinecap\platform\in для файлов, созданных и переименованных.

У меня есть разрешения «Полный доступ», начиная с \\machinecap\platform (включая все подкаталоги), но только при этом нет доступа к какой-либо другой папке на сервере (это Windows Server 2003).

Проблема в том, что когда файл поступает на сервер, служба перестает работать, и в средстве просмотра событий не регистрируется сообщение (спуск). Пытаясь отследить проблему, я выполнил вход на сервер и попытался вручную выполнить все шаги, которые выполняет приложение. Я могу создавать файлы в папке «in», но не могу удалить эти файлы ... отображается сообщение об ошибке: "E:\ is not accessible. Access is denied."

Конечно, у меня нет доступа к корневой папке E: \, только к E:\cappuccino\platform ... это проблема? Действительно ли мне нужно дать доступ на чтение к E:\, чтобы я мог читать E:\cappuccino\platform?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Сообщение об исключении:

Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies.
An attempt was made to load a program with an incorrect format.
File name: 'Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'
   at TestRiskStore.ArisReportReader.CreateOrRename(Object source, FileSystemEventArgs e)
   at System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

Обратите внимание, что я использую компонент Oracle.DataAccess .. Я думаю, что проблема связана с этим, не уверен .... есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 28 сентября 2011

Я обнаружил проблему: мой компьютер 32-разрядный, сервер 64-разрядный, и я компилировал приложение для запуска на любой платформе. Проблема в том, что компоненты OracleDataAccess, которые были установлены на сервере, рассчитаны на 32 бита, поэтому сборки были установлены только в папке GAC_32. Таким образом, когда приложение пытается работать в 64-битном режиме, оно не находит сборки.

Итак, я просто перекомпилировал приложение как x86 (32 бита), и оно заработало. Теперь приложение работает в 32-битном режиме и ищет сборки в нужной папке.

...