5

MS Office プログラムは、以前に開いたときにエラーの原因となった無効なファイルのリストを保持しています。ユーザーは、プログラム メニューからリストにアクセスし、再度有効にするドキュメントを選択することで、このリストからドキュメントを削除できます。( http://support.microsoft.com/kb/286017 )

問題は、GUI を操作せずに、このドキュメントの再有効化をプログラムでどのように行うことができるかということです。

4

5 に答える 5

5

以前の回答を統合し、ここで説明します。

Office 製品は、無効化された項目を という名前のキーの下にレジストリに保存しますHKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems。たとえば、Excel 2010 の無効リストは の下にありHKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItemsます。

無効化された各アイテムは、ランダムに名前が付けられた type のキーとして保存されますREG_BINARY。バイト配列の形式は次のとおりです。

  • バイト 0-3: ??? (おそらく 32 ビット uint 型コード、1 = COM アドイン)
  • バイト 4 ~ 7 : 最初の文字列 (パス) の 32 ビット uint 長 (バイト単位)
  • バイト 8 ~ 11 : 2 番目の文字列の 32 ビット uint 長 (バイト単位) (説明)
  • bytes 12-end : Unicode 文字の 2 つの文字列。それぞれのバイト長は上記の uints に格納されます。
于 2014-10-02T15:45:36.447 に答える
3

これは、Win7 上の MS-Access 2013 で発生していた同様の問題に合わせてまとめた Powershell スクリプトです。

#RemoveOfficeDisabledItem.ps1
#command line: 
#   powershell -executionpolicy unrestricted -file ".\RemoveOfficeDisabledItem.ps1"

#Update these variables to suit your situation
$OfficeVersion="15.0"
$OfficeApp="Access"
$FileName="My Blocked File.mdb"

#Converts the File Name string to UTF16 Hex
$FileName_UniHex=""
[System.Text.Encoding]::ASCII.GetBytes($FileName.ToLower()) | %{$FileName_UniHex+="{0:X2}00" -f $_}

#Tests to see if the Disabled items registry key exists
$RegKey=(gi "HKCU:\Software\Microsoft\Office\${OfficeVersion}\${OfficeApp}\Resiliency\DisabledItems\")
if($RegKey -eq $NULL){exit}

#Cycles through all the properties and deletes it if it contains the file name.
foreach ($prop in $RegKey.Property) {
   $Val=""
   ($RegKey|gp).$prop | %{$Val+="{0:X2}" -f $_}
   if($Val.Contains($FileName_UniHex)){$RegKey|Remove-ItemProperty -name $prop}
}
于 2015-01-26T22:38:58.177 に答える
1

MS Office XP(2002)MSWordに関して、無効化されたドキュメントのリストは、キーの下にランダムな名前のバイナリ値として保持されます:[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 10.0 \ Word \ Resiliency \ DisabledItems]

したがって、すべてのユーザーの「DisabledItems」キーの下の値を削除すると、おそらくうまくいくでしょう。

それ以上のものはありますか?私にはまだ分かりません。

于 2009-04-27T06:57:19.130 に答える
1

Office が COMAddins を処理する方法についての良い記事が codeproject にあります。通常のアドインは同等に処理され、システムはこれまで変更されていません (Office 2013 まで)。私が知った限りでは。ランダムに名前が付けられた値には、null 文字列で区切られた Unicode 文字のバイト配列が含まれています。null で区切られた値の配列内のすべてのエントリを見つけることができませんでした。ただし、インデックス (3) には ADDIn のファイル名が含まれており、インデックス (4) には ADDIn の説明 (利用可能な場合) が含まれています。

Luie が 2009 年に書いたように、レジストリ キーを削除する前に値を読み、アドインを再インストールするようユーザーに依頼する必要があります。

于 2014-08-26T08:56:53.780 に答える