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

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

ただいまの
回答率

90.84%

  • Internet Explorer

    255questions

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

  • MFC

    109questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 319

teketeke2283

score 2

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

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


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mike2mike4

    2018/05/08 23:31

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

    キャンセル

  • teketeke2283

    2018/05/08 23:55

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

    キャンセル

  • mike2mike4

    2018/05/09 00:17

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

    キャンセル

  • teketeke2283

    2018/05/09 00:37

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

    キャンセル

回答 1

checkベストアンサー

+7

管理者権限がないユーザーで 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 でそんなオプションがあれば良いのですが、私は以下のように実装しています。

STDAPI DllInstall(BOOL bInstall, _In_opt_ PCWSTR pszCmdLine)
{
    AFX_MANAGE_STATE(_afxModuleAddrThis);

    HRESULT hr;
    HKEY hkeyRedirected;
    LSTATUS lstatus = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, KEY_ALL_ACCESS, &hkeyRedirected);
    if (lstatus != NOERROR)
        return HRESULT_FROM_WIN32(lstatus);
    lstatus = RegOverridePredefKey(HKEY_CLASSES_ROOT, hkeyRedirected);
    if (lstatus != NOERROR)
    {
        RegCloseKey(hkeyRedirected);
        return HRESULT_FROM_WIN32(lstatus);
    }
    if (bInstall)
    {
        // 本来は直接呼び出せるように RegOverridePredefKey でいろいろマッピングするが、めんどくさいのでパス。
        // hr = DllRegisterServer();
        ITypeLib* plib;
        wchar_t dllpath[MAX_PATH];
        GetModuleFileName(AfxGetInstanceHandle(), dllpath, _countof(dllpath));
        hr = LoadTypeLib(dllpath, &plib);
        if (SUCCEEDED(hr))
        {
            hr = RegisterTypeLibForUser(plib, dllpath, NULL);
            if (SUCCEEDED(hr))
            {
                if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
                    hr = ResultFromScode(SELFREG_E_CLASS);
            }
        }
    }
    else
    {
        // 本来は直接呼び出せるように RegOverridePredefKey でいろいろマッピングするが、めんどくさいのでパス。
        // hr = DllUnregisterServer();
        UnRegisterTypeLibForUser(_tlid, 1, 0, 0, SYS_WIN32);
        if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
            hr = ResultFromScode(SELFREG_E_CLASS);
        else
            hr = S_OK;
    }
    RegOverridePredefKey(HKEY_CLASSES_ROOT, NULL);
    RegCloseKey(hkeyRedirected);
    return hr;
}


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

EXPORTS
    DllCanUnloadNow     PRIVATE
    DllGetClassObject   PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
    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/11 00:00

    atata0319様
    回答ありがとうございます。
    CAB ファイルをダウンロードしてインストールするように構成しているので、2.Per User ActiveX の箇所を参考にしました。
    CABファイルに同梱しているinfファイルに、下記の記載を追加しました。

    [Deployment]
    InstallScope=user

    そうしたところ、ActiveXの実行ができなくなってしまいました。
    infファイルへの追記方法が間違っていますでしょうか?

    キャンセル

  • 2018/05/11 02:26 編集

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

    回答に追記しました。

    キャンセル

  • 2018/05/14 14:43

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Internet Explorer

    255questions

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

  • MFC

    109questions

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