Почему dsofile.dll по-прежнему нуждается в установке Office?

Я написал небольшой фрагмент кода, используя компонент dsofile.dll для изменения свойств документа после загрузки файла на веб-сервер (чтобы установить guid для связи файла с записью в базе данных). Я взял компонент и инструкции отсюда: http://support.microsoft.com/kb/224351

Насколько я понял, он не использует Office для изменения свойств. Я реализовал его и протестировал на своей 32- и 64-битной машине (веб-сервер работает в 32-битном режиме), и все работало нормально. Я был счастлив. Но после развертывания его на жизненной машине он не сохранял свойства моих значений, но также не выдавал никаких ошибок!

Вот некоторый код, чтобы увидеть, что я сделал:

public void SetProperty(string filename, string property, string value)
{
  m_oDocument.Open(filename);

  var oProp = m_oDocument.CustomProperties;
  try
  {
    oProp.Add(property, value);
  } catch(Exception)
  {
    foreach (CustomProperty cProp in oProp.Cast<CustomProperty>().Where(cProp => cProp.Name == property))
    {
      cProp.set_Value(value);
    }
  }
  if ( Debug)
  {
    m_spy.Spy("filename: " + filename);
    m_spy.Spy("filename modified: " + m_oDocument.IsDirty);
  }

  if ( m_oDocument.IsDirty ) m_oDocument.Save();
  m_oDocument.Close();

  if ( Debug ) m_spy.Spy(GetProperty(filename, property));

}

Поэтому я начал внедрять отладочный код, целыми днями читал статьи в Интернете. В итоге я установил 32-битную версию Office 2010 на сервер.

Затем после того, как я получил новую ошибку:

The document is not an OLE file, and does not support extended document properties

Странно, ошибка была только для dotx, xlsx, ff, но не для doc, xls, ff.

После того, как я установил все доступные обновления для Office 2010 и повторил попытку. Затем он работал так, как я хотел, и сохранял свойства, которые я установил на странице загрузки, для всех файлов.

Так что установка Office 2010 в качестве обязательной на сервер — это не то, чего я ожидал :)

  • Кто-нибудь знает, какие компоненты установки Office dsofile.dll должны работать без установки заполнения?
  • Другими словами: Могу ли я скопировать кучу файлов и "прописать" их на сервере вручную?
  • Или я что-то не так понял и это мой код?!

person YvesR    schedule 24.10.2012    source источник


Ответы (1)


Странно ошибка была только для dotx,xlsx,ff, но не для doc,xls

Это по дизайну. Образец dsofile разрешает доступ только к файлам, использующим формат контейнера OLE Structured Storage. OLE вообще мертвая технология, Office был одним из последних продуктов Microsoft, которые еще ее поддерживали. Но эта поддержка быстро исчезла с версии 2007 года. Его также нет для форматов файлов .dotx и .xlsx, это заархивированные XML-файлы, соответствующие спецификации OpenXML< /а>. Вы не можете получить к ним доступ с помощью dsofile.

Вам нужно будет пойти по магазинам для лучшего решения, есть много.

person Hans Passant    schedule 25.10.2012
comment
Спасибо за разъяснение. Но мне все равно интересно, почему он работает после установки Office на сервер (какой-то секретный код в dsofile, который использует офисные компоненты?!). О других решениях: мне нужно решение, позволяющее добавлять свойства в документы Office 2003, 2007, 2010. - person YvesR; 25.10.2012
comment
Привет, Ханс Пассант, есть ли альтернатива DSOFILE от MS? Спасибо - person subZero; 05.08.2014