質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Q&A

解決済

1回答

13637閲覧

ActiveXを管理者権限なしでインストール

teketeke2283

総合スコア8

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

0クリップ

投稿2018/05/08 14:08

編集2018/05/08 15:37

管理者権限のないユーザーで、ActiveXをインストールしようとすると、管理者権限を持っているユーザのIDとパスワードの入力を求められてしまいます。

管理者権限のないユーザーでもActiveXをインストールする方法はありますでしょうか?
ご教示いただきたく、宜しくお願い致します。


質問が分かりにくかったので、追記します。
以前、下記の対応でOCXを他端末にて実行することができました。
https://teratail.com/questions/118350

これを管理者権限がないユーザで実行する方法を知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mike2mike4

2018/05/08 14:31

それは会社のパソコンなどに勝手にインストールしたいとかですか?
teketeke2283

2018/05/08 14:55

そういうわけではありません。管理者権限を持たないユーザーが多く、管理者が手作業でクライアントにインストールしてまわるのに大変手間がかかるため、管理者権限がないユーザでインストールする方法がないか知りたいです。
mike2mike4

2018/05/08 15:17

技術名は覚えてないので回答にはしませんが、サーバー側の設定で「更新」できるはずです。
teketeke2283

2018/05/08 15:37

ありがとうございます。もう少し調べてみます。
guest

回答1

0

ベストアンサー

管理者権限がないユーザーで ActiveX をインストールするには以下の方法があります。
上からおすすめ順になります。

#1.Active Directory
組織内で Active Directory が有効であれば、Active Directory で配信するように設定してください。

#2.Per User ActiveX
CAB ファイルをダウンロードしてインストールするように構成している場合、INF ファイルに Per User ActiveX の設定を実施すれば、各ユーザーがインストール可能な CAB を作成することができます。
詳しくは以下のページを参照ください。
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dd433049(v=vs.85)
ただし、IE8 以降が必須です。
mike2mike4 さんが言われてたサーバ側の設定というのはおそらくこの方法だと思います。

#3.Per User Registration
REGSVR32.EXE を直接起動してインストールしている場合、
ActiveX 側で Per User Registration をサポートしていれば、
REGSVR32.EXE に追加の引数を渡すことによりユーザー毎にインストールすることができます。

・ATL DLL
デフォルトでサポートされています。以下のコマンドラインを使用します。
REGSVR32 対象のActiveX.DLL /i:user /n
Per User Registration を使用してインストールした場合、アンインストール時には /i:user /n /u を指定します。

・ATL EXE
多分、デフォルトでサポートされていたと思いますが、確認していません。
起動引数に /RegServerPerUser を指定します。
/RegServerPerUser でインストールした場合、アンインストール時は /UnregServerPerUser となります。

・MFC DLL
めんどくさいので ATL にしませんか?
ATL の動作に合わせる必要はありませんが、 DllInstall を実装して def ファイルでエクスポートすることにより可能です。App Wizard でそんなオプションがあれば良いのですが、私は以下のように実装しています。

C++

1STDAPI DllInstall(BOOL bInstall, _In_opt_ PCWSTR pszCmdLine) 2{ 3 AFX_MANAGE_STATE(_afxModuleAddrThis); 4 5 HRESULT hr; 6 HKEY hkeyRedirected; 7 LSTATUS lstatus = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\Classes", 0, KEY_ALL_ACCESS, &hkeyRedirected); 8 if (lstatus != NOERROR) 9 return HRESULT_FROM_WIN32(lstatus); 10 lstatus = RegOverridePredefKey(HKEY_CLASSES_ROOT, hkeyRedirected); 11 if (lstatus != NOERROR) 12 { 13 RegCloseKey(hkeyRedirected); 14 return HRESULT_FROM_WIN32(lstatus); 15 } 16 if (bInstall) 17 { 18 // 本来は直接呼び出せるように RegOverridePredefKey でいろいろマッピングするが、めんどくさいのでパス。 19 // hr = DllRegisterServer(); 20 ITypeLib* plib; 21 wchar_t dllpath[MAX_PATH]; 22 GetModuleFileName(AfxGetInstanceHandle(), dllpath, _countof(dllpath)); 23 hr = LoadTypeLib(dllpath, &plib); 24 if (SUCCEEDED(hr)) 25 { 26 hr = RegisterTypeLibForUser(plib, dllpath, NULL); 27 if (SUCCEEDED(hr)) 28 { 29 if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE)) 30 hr = ResultFromScode(SELFREG_E_CLASS); 31 } 32 } 33 } 34 else 35 { 36 // 本来は直接呼び出せるように RegOverridePredefKey でいろいろマッピングするが、めんどくさいのでパス。 37 // hr = DllUnregisterServer(); 38 UnRegisterTypeLibForUser(_tlid, 1, 0, 0, SYS_WIN32); 39 if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE)) 40 hr = ResultFromScode(SELFREG_E_CLASS); 41 else 42 hr = S_OK; 43 } 44 RegOverridePredefKey(HKEY_CLASSES_ROOT, NULL); 45 RegCloseKey(hkeyRedirected); 46 return hr; 47}

さらにプロジェクトの DEF ファイルに以下のように DllInstall を追加します。

DEF

1EXPORTS 2 DllCanUnloadNow PRIVATE 3 DllGetClassObject PRIVATE 4 DllRegisterServer PRIVATE 5 DllUnregisterServer PRIVATE 6 DllInstall PRIVATE

これによって ATL と同様に /i:user /n で個別ユーザーでインストールが可能になります。

・MFC EXE
めんどくさいので ATL にしませんか?
MFC DLL の例に合わせて実装してください。多分、関係ないと思うので解説は省略します。


>2.
Githubにサンプルを追加しました。
https://github.com/atata0319/teratail125280/tree/master/PUAxControlTest1/makecab

test.html で管理者権限のないユーザーでもインストールできることを確認しています。(Windows 10 Pro 64bits 上の IE11)

投稿2018/05/08 17:39

編集2018/05/10 17:49
atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teketeke2283

2018/05/10 15:00

atata0319様 回答ありがとうございます。 CAB ファイルをダウンロードしてインストールするように構成しているので、2.Per User ActiveX の箇所を参考にしました。 CABファイルに同梱しているinfファイルに、下記の記載を追加しました。 [Deployment] InstallScope=user そうしたところ、ActiveXの実行ができなくなってしまいました。 infファイルへの追記方法が間違っていますでしょうか?
atata0319

2018/05/10 17:42 編集

レジストリ登録が必要な各コンポーネントに対して RedirectToHKCU=yes を追加する必要があります。おそらくそれが足りていないためにレジストリ登録に失敗しているかと思います。各 RegisterServer=yes の行の下に追記してみてください。 回答に追記しました。
teketeke2283

2018/05/14 05:43

ありがとうございます!できるようになりました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問