Я написал небольшой фрагмент кода, используя компонент 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 должны работать без установки заполнения?
- Другими словами: Могу ли я скопировать кучу файлов и "прописать" их на сервере вручную?
- Или я что-то не так понял и это мой код?!