Share via


Word 2007 File Seems To Be Deleted When You Open And Save It Using DSOFramer

This is one of the interesting cases I had lately. My customer was using DSOFramer sample to host Office Documents, but whenever he tried to open and save Word 2007 documents in this manner, guess what !! the file seems to be deleted !

As I am basically a VB guy I did not want to bother myself with VC++ code of DSOFramer, because I've had easier ways to troubleshoot. The first thing I tried was Process Monitor from sysinternals. I could see that we are moving the file to a temp directory and then while saving it we are saving the changes in it. hmm..strange!

Then I checked DSOFramer code and I realized that IPersist:Save() is returning S_OK, it doesn't look like there is some issue whatsoever. Then moved to Word 2007 code, to me it looks like a bug in the implementation of IPersist:Save().

 

So ..to tackle this I had to modify the code of DSOFramer a bit, being more precise I modified the code of "CDsoDocObject::SaveStorageToFile" [this is in source file dsofdocobj.cpp]. Here is the modified code:

 

 if (SUCCEEDED(hr = m_pole->QueryInterface(IID_IPersistFile, (void**)&pipfile))) 
{ 
    //Get the current open file 
    LPWSTR pwszCurPath = new WCHAR(MAX_PATH+1);
    pipfile->GetCurFile(&pwszCurPath); 
    //Perform save. 
    hr = pipfile->Save(pwszFile, FALSE); 
    pipfile->Release(); 
    //Save results S_OK, but the document is saved to the original location (IPersistFile->GetCurFile) in Word 2007. 
    //We will just check if that's the case and move the file. 
    if (SUCCEEDED(hr) && !FFileExists(pwszFile)) 
    { 
        //We should come here only in case of Word 2007. 
        CopyFileW(pwszCurPath, pwszFile, TRUE); 
    } 
} 

Ok..bye for now.. will be  back in a day with some more, and yes I am starting to do technorati and del.icio.us tagging

 

Technorati tags: DSOFramer, VC++, Office, Office Automation, Troubleshooting, Technorati, del.icio.us

del.icio.us tags: DSOFramer, VC++, Office, Office Automation, Troubleshooting, Technorati, del.icio.us

Community Server Tags: DSOFramer, VC++, Office, Office Automation, Troubleshooting, Technorati