管理者権限のないユーザーで、ActiveXをインストールしようとすると、管理者権限を持っているユーザのIDとパスワードの入力を求められてしまいます。
管理者権限のないユーザーでもActiveXをインストールする方法はありますでしょうか?
ご教示いただきたく、宜しくお願い致します。
質問が分かりにくかったので、追記します。
以前、下記の対応でOCXを他端末にて実行することができました。
https://teratail.com/questions/118350
これを管理者権限がないユーザで実行する方法を知りたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/08 14:55
2018/05/08 15:17
2018/05/08 15:37
回答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総合スコア881
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/10 15:00
2018/05/10 17:42 編集
2018/05/14 05:43
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。