2017-12-24 26 views
1

this postで説明したWindows 10で同じバグが発生しているのでしょうか。標準Windowsユーザーでアンインストーラに問題が発生しました

標高のない標準ユーザーがインストールしたプログラムのアンインストールに問題があります。

私はINNOセットアップを使用しているため、PrivilegesRequired =最低であり、INNOは昇格された特権を要求せず、現在のユーザー用にインストールし、アンインストーラを作成します。 uninst000.exeを私のアプリケーションフォルダに入れて、私はINNOを使ってアンインストーラのアイコンを自分のアプリケーションのスタートメニューグループに入れます(これはすべて現在のユーザー向けに行われています)。 INNOはまた、Windows 10の設定/アプリケーション&機能アプレットに項目を追加します(これは問題が発生する場所です)。

スタートメニューのアイコンからアンインストーラを起動すると、特権の昇格を求めるプロンプトが表示されず、アプリが問題なくアンインストールされます。

Apps &機能からアンインストーラを起動した場合は、特権の昇格を求めるプロンプトが表示され、管理者の資格情報が入力されていれば、そのアプリケーションは正しくアンインストールされません。いくつかのものはアンインストールされていますが、すべてではありません。 Appファイルは削除され、スタートメニューグループは削除されますが、INNOの[UninstallRun]セクションの追加のクリーンアップアクションは行われません。また、アンインストール項目はApps &機能のリストから削除されません。

私の質問は、これは以前の投稿で言及されたWindows 10のバグが原因ですか?

+1

実際問題を再現できます。この問題を回避するには、アンインストーラが実行されている間にアンインストーラが実行されていることをアンインストーラが検出し、インストーラを正しく実行する方法を表示できます。 –

+0

アンインストーラが実行している権限をアンインストーラにチェックさせ、アンインストールキーがレジストリのHKLMまたはHKCU領域にあるかどうかを確認するように指示しました。 – user3142056

答えて

1

@MartinPrikrylをアンインストールして(つまりInitializeUninstall)、実行している権限をチェックして、アンインストールキーがレジストリのHKLMまたはHKCU領域にあるかどうかを確認しています。これまでのところ私のテストはこれがうまくいくことを示している。

function IsRegularUser(): Boolean; 
begin 
    Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn); 
end; 

function WasInstalledAsStandardUser(): Boolean; //return true if uninstall key is in Current User area of registry 
var 
    sUnInstPath: String; 
    sUnInstallString: String; 
begin 
    sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppName")}_is1'); 
    sUnInstallString := ''; 
    Result := True; 
    //only one of these keys should be present, but if both are, return True for nonadmin 
    if RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then Result:=False; 
    if RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString) then Result:=True; 
end; 

function InitializeUninstall: Boolean; 
begin 
    if WasInstalledAsStandardUser() and (Not IsRegularUser) then begin 
     MsgBox(MyApp was installed with standard user rights, so it must be uninstalled with stardard user rights.'#13' So use Start/All Programs/MyApp/Uninstall.', mbInformation, MB_OK); 
     Result:=False; exit; 
    end; 
    Result := True; 
end; 
関連する問題