私は現在、Add-In Express (www.add-in-express.com) .NET ライブラリを使用して VB.NET で作成され、.NET Framework 2.0 をターゲットとする Internet Explorer BHO に取り組んでいます。ブラウザー アドオンは、アドオンの登録も処理する InnoSetup 5 インストーラーを介して、ユーザーの AppData/Local ディレクトリにインストールされます。
インストール時に、InnoSetup インストーラーは UAC 昇格されます。これは、BHO をブラウザーに登録する実行可能ファイル (Add-In Express によって提供される) に必要です。
私の .NET 経験はせいぜい最小限であることを指摘しなければなりません - 私はアプリをコーディングするのに十分な知識を持っていますが、オペレーティング システムがアプリケーションをどのように処理するかについてはまったく知識がありません。できます。
私のアドオンが利用する機能の 1 つは、Visual Studio のユーザー設定です (VS の [プロパティ] -> [設定] セクションを使用)。元の開発マシンの IE でアドオンをデバッグすると、すべてが期待どおりに機能します。
アドオンを新しいマシンにインストールすると、アプリが My.Settings.Save() を呼び出そうとするたびに例外が発生します。この同じ問題について、ウェブ上で他の同一のシナリオを見つけるのに苦労しています。以下のスタック トレースを見つけてください。
Exception Source: mscorlib
Exception Type: System.InvalidOperationException
Exception Message: Method failed with unexpected error code 3.
Exception Target Site: CreateInternal
---- Stack Trace ----
System.Security.AccessControl.NativeObjectSecurity.CreateInternal(resourceType As ResourceType, isContainer As Boolean, name As String, handle As SafeHandle, includeSections As AccessControlSections, createByName As Boolean, exceptionFromErrorCode As ExceptionFromErrorCode, exceptionContext As Object)
mscorlib.dll: N 0306 (0x132) IL
System.Security.AccessControl.FileSystemSecurity..ctor(isContainer As Boolean, name As String, includeSections As AccessControlSections, isDirectory As Boolean)
mscorlib.dll: N 0017 (0x11) IL
System.Security.AccessControl.FileSecurity..ctor(fileName As String, includeSections As AccessControlSections)
mscorlib.dll: N 0000 (0x0) IL
System.Configuration.Internal.WriteFileContext.DuplicateTemplateAttributes(source As String, destination As String)
mscorlib.dll: N 0008 (0x8) IL
System.Configuration.Internal.WriteFileContext.DuplicateFileAttributes(source As String, destination As String)
mscorlib.dll: N 0028 (0x1C) IL
System.Configuration.Internal.WriteFileContext.Complete(filename As String, success As Boolean)
mscorlib.dll: N 0018 (0x12) IL
System.Configuration.Internal.InternalConfigHost.StaticWriteCompleted(streamName As String, success As Boolean, writeContext As Object, assertPermissions As Boolean)
mscorlib.dll: N 0070 (0x46) IL
System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.WriteCompleted(streamName As String, success As Boolean, writeContext As Object, assertPermissions As Boolean)
mscorlib.dll: N 0000 (0x0) IL
System.Configuration.Internal.DelegatingConfigHost.WriteCompleted(streamName As String, success As Boolean, writeContext As Object, assertPermissions As Boolean)
mscorlib.dll: N 0000 (0x0) IL
System.Configuration.ClientSettingsConfigurationHost.WriteCompleted(streamName As String, success As Boolean, writeContext As Object)
mscorlib.dll: N 0019 (0x13) IL
System.Configuration.UpdateConfigHost.WriteCompleted(streamName As String, success As Boolean, writeContext As Object)
mscorlib.dll: N 0036 (0x24) IL
System.Configuration.MgmtConfigurationRecord.SaveAs(filename As String, saveMode As ConfigurationSaveMode, forceUpdateAll As Boolean)
mscorlib.dll: N 0793 (0x319) IL
System.Configuration.Configuration.SaveAsImpl(filename As String, saveMode As ConfigurationSaveMode, forceSaveAll As Boolean)
mscorlib.dll: N 0036 (0x24) IL
System.Configuration.Configuration.Save()
mscorlib.dll: N 0000 (0x0) IL
System.Configuration.ClientSettingsStore.WriteSettings(sectionName As String, isRoaming As Boolean, newSettings As IDictionary)
mscorlib.dll: N 0219 (0xDB) IL
System.Configuration.LocalFileSettingsProvider.SetPropertyValues(context As SettingsContext, values As SettingsPropertyValueCollection)
mscorlib.dll: N 0219 (0xDB) IL
System.Configuration.SettingsBase.SaveCore()
mscorlib.dll: N 0154 (0x9A) IL
System.Configuration.SettingsBase.Save()
mscorlib.dll: N 0016 (0x10) IL
System.Configuration.ApplicationSettingsBase.Save()
mscorlib.dll: N 0023 (0x17) IL
FindAndRemind.User.DetectUser()
mscorlib.dll: N 0042 (0x2A) IL
FindAndRemind.IEModule.IEModule_DownloadComplete()
mscorlib.dll: N 0151 (0x97) IL
AddinExpress.IE.ADXIEModule.DoDownloadComplete()
mscorlib.dll: N 0010 (0xA) IL
User/AppData ディレクトリを検索すると、組織名用のフォルダーが作成されていないことがわかります。また、user.config ファイルが Internet Explorer 自体によって Microsoft_Corporation フォルダーの下に作成される可能性があることも読みましたが、これも空です。これはアクセス許可の問題のように思えますが、Windows 用のアプリケーションのコーディング経験がないため、途方に暮れています。
以前にこの問題に遭遇した人はいますか?もしそうなら、どのように解決しましたか?
前もって感謝します!
編集:
また、例外を閉じてアプリを実行し続けることもできますが、設定データが保存されないため、アドオンが少し冗長になることにも注意してください。
編集2:
残念ながら、管理者モードで Internet Explorer を実行することはできません。アドインは、現在 20,000 人以上のユーザーベースを持つ古いバージョンへの更新であるためです。当社のユーザーは幅広いスキル レベルをカバーしており、アドインは複数のオペレーティング システムとユーザー設定で「そのまま」機能する必要があります。