2016-01-28 3 views
0

Я пытаюсь открыть запуск Excel, содержащий существующий файл для открытия. Это мой код:ASP.NET Не удается запустить файл Excel на сервере

Protected Sub fileManager_SelectedFileOpened(source As Object, e As FileManagerFileOpenedEventArgs) 

    Try 
     Dim FullName As String = e.File.FullName 
     System.Diagnostics.Process.Start(FullName) 
     dvFileError.Visible = False 
    Catch ex As Exception 
     dvFileError.Visible = True 
     lblFileError.Text = ex.Message 
    End Try 

End Sub 

В e.File.FullName я могу найдено имя файла с его пути, так что, когда я запустить его в процессе он должен открыть файл в Excel. Так что этот код работает на локальном, но когда я загружаю его на веб-сервер, он не работает. Он говорит: «Произошла ошибка при отправке команды в приложение».

Я создал файл .txt, чтобы проверить, может ли мое приложение получить доступ к папке, и я принимаю это Ошибка «Отказано в доступе».

Странно, потому что если я открою тот же файл Excel, используя ASPxSpreadSheet Control для DevExpress, файл будет открыт.

Любые решения?

ответ

0

Ваш веб-сервис не может просто открыть исполняемый файл на клиенте при нормальных обстоятельствах. За некоторыми исключениями:

  1. У вашего веб-сервера есть привилегии администратора на клиенте. Обычно это происходит только в сценарии локальной сети компании
  2. Ваш веб-сервис - это та же машина, что и клиент.
  3. У вас на компьютере есть какое-то программное обеспечение, которое может запускать программу по мере необходимости. Для этого требуется технология, не связанная с веб-песочницей HTML/CSS/JS браузера.

Ты работал под №2. Но как только вы переключаетесь на удаленных клиентов, которые не будут работать. Вы не можете использовать System.Diagnostics.Process для запуска приложений на удаленном клиенте. И вы не можете напрямую обращаться к файлам на компьютерах удаленных клиентов. Ваш код VB.NET работает на сервере, а не на клиенте. На вашем клиенте работает только ваш HTML/CSS/JS, и это находится в ограниченной песочнице браузера.

Общий шаблон для достижения того, что вы хотите, просто предлагает файл для загрузки пользователем путем записи файла в ответ HTTP. Затем пользователь может открыть файл и запустить свою программу по умолчанию для редактирования этого типа файла.

0

Прежде чем начать, могу сказать, что это одна из худших вещей, которые вы можете сделать - это запустить приложение Excel на веб-сервере.

Если вам нужно прочитать или сохранить файлы Excel, используйте Microsoft.Ace.OleDb.xx (xx-версия). Это позволит вам работать с Excel, как если бы это была обычная БД. Более того, если в строке соединения вы укажете имя файла, который не существует, он создаст его.

Помните, вы на сервере. И ваше приложение запускается в пуле приложений. Пул приложений работает под учетной записью пользователя, у которой может не быть разрешения на открытие какого-либо пользовательского интерфейса.

Помню, у нас была проблема с сервисом Windows и автоматизацией Excel. Excel нуждается в учетной записи, которая запускает ее, чтобы она была в буквальном смысле включена в машину. Другими словами, вам необходимо использовать учетные данные учетной записи, которая запускает пул приложений для входа в этот компьютер. Только тогда автоматизация Excel будет работать.

В любом случае. Когда вы делаете автоматизацию Excel, вам нужно сначала открыть Excel, чтобы избавиться от всех диалогов, отображаемых с начала.И пока вы не нажмете их, каждый экземпляр будет продолжать показывать их, даже если вы не видите их или экземпляр.

И последние слова пары - вам нужно использовать некоторые сборки interop, а не только process.start. Он позаботится о некоторых вещах. Но Microsoft сообщила нам - они не поддерживают или не рекомендуют автоматизацию Excel, хотя, признаться - это возможно. Возвращаясь к параграфу № 2 - чтобы писать или читать данные, сделайте это, а не то, что вы делаете. Вы можете выполнить # 2 в процессе IIS. Но не делайте автоматизацию в процессе - очень плохая идея.

Смежные вопросы