4

ユーザーが管理者/昇格された権限を持っていない場合にプログラムでファイルの関連付けを変更する方法(Win XP、Vista、7)? これを回避する方法についてのアイデアはありますか? 基本的に、アプリケーションを現在のように軽量に保ちたいと考えています (インストールと実行に権限の昇格は必要ありません)。現時点では、ユーザーがファイルの関連付けを変更できる GUI インターフェイスを提供していますが、ユーザーの権限が制限されている場合は、それができないというメッセージを表示し、「このプログラムを実行する」を有効にする方法を説明するだけです。管理者として」ボックスを開き、プログラムを再起動します。ユーザーに権限がある場合は、関連付けを変更するだけです。

それを行い、「ライト」を維持するためのより良い方法はありますか?

4

4 に答える 4

10

Windows (windows 2000 以降) では、昇格した特権を設定する必要があるシステム全体のファイル関連付けと、ユーザーごとのファイル関連付けを行うことができます。

軽量のままにしたい場合は、 per_userファイルの関連付けを作成するだけです。

次の記事をご覧ください: Windows 2000 および Windows Server 2003 におけるファイルの種類とファイルの関連付け機能の変更点

于 2011-01-03T14:14:15.587 に答える
2

ShellExecute を使用して、外部ユーティリティを生成できます。昇格されたアクセス許可が必要であることを示すために、必ずアクションに盾のアイコンを含めてください。次に、ユーザーにプロンプ​​トを表示し、特別なアクセス許可が必要であることを知らせます。

できることの 1 つは、権限が変更されることを示すフラグを独自のアプリケーションに追加することです。そして、特別なフラグを付けて、アプリケーションを再度実行します。

たとえば、アプリケーションが

MyApplication.exe

あなたはスポーンすることができます

MyApplication.exe /setfiles

ファイルの関連付けのみを設定してから終了します。そうすれば、1 つの実行可能ファイルを出荷するだけで済みます。

function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean;
var
    sei: TShellExecuteInfo;
begin
    ZeroMemory(@sei, SizeOf(sei));
    sei.cbSize := SizeOf(TShellExecuteInfo);
    sei.Wnd := hwnd;
    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
    sei.lpVerb := PChar('runas');
    sei.lpFile := PChar(Filename); // PAnsiChar;
    if parameters <> '' then
        sei.lpParameters := PChar(parameters); // PAnsiChar;
    sei.nShow := SW_SHOWNORMAL; //Integer;
    Result := ShellExecuteEx(@sei);
end;
于 2011-01-03T14:23:20.540 に答える
1

私の解決策(より良い代替案を待っています):

関連付けをグローバルに変更できるのは管理者だけのようです。この観点から、私が今想像できる最善の方法 (ただし、完全ではない) は、昇格された権限で暗黙的に実行される小さな外部ユーティリティを作成することです。このツールは、関連付けを変更します。もちろん、昇格された権限のないユーザーは関連付けを変更できません。

于 2011-01-03T14:11:24.667 に答える
0

レジストリ (OS は Windows XP) を使用して、この場所で解決策を見つけることができます。それはフランス語です...完全なソース(十分に文書化されています)と実行可能ファイルをダウンロードしてください。

于 2011-01-03T19:44:27.837 に答える