2012-01-18 14 views
1

私の要件は以下のとおりです。私はレジストリからアドオン製品IDを読み、メインセットアップをアンインストールする前にその製品IDを使用してセットアップをアンインストールしました。 私はそれは、Inno Setupのでコンパイルされ、エラーが表示されていない以下のコードInnoセットアップを使用してメインセットアップをアンインストールする前に、アドオンセットアップをアンインストールしてください。

[code] 
const 
    RegProductLocation = 'SOFTWARE\My Company\My Product\Sample\ {#Version}'; 
var SamplesProductId : string; 
function GetSamplesID(): Boolean; 
begin 
    if RegQueryStringValue(HKEY_CURRENT_USER, RegProductLocation, 'ProductID', SamplesProductId) then 
begin 
    Result:= true; 
end else begin 
Result:= false; 
    end;end; 

[UninstallRun] 
Filename: msiexec.exe; Parameters: " /x ""{SamplesProductId}"" /qn"; Check:GetSamplesID(); Flags: runhidden; 

を使用していました。この問題を解決するために私を助けてください。

+2

これは、(1)コードを適切にフォーマットする、(2)エラーを伝える、(3)コンパイラがエラーを示す行を伝える、どのように 'バージョン'、 'SamplesProductId'などが定義されています.. –

答えて

1

あなたは[Code]

からデータにアクセスする機能と{code:...}定数を使用する必要があり、このような何か(テストされていない空気コード):

[UninstallRun] 
Filename: msiexec.exe; Parameters: "/x ""{code:GetSamplesID}"" /qn"; Check:CheckHasSamplesID(); Flags: runhidden; 

[code] 
const 
    RegProductLocation = 'SOFTWARE\My Company\My Product\Sample\{#Version}'; 
var 
    SamplesProductId : string; 

function CheckHasSamplesID(): Boolean; 
begin 
    if RegQueryStringValue(HKEY_CURRENT_USER, RegProductLocation, 'ProductID', SamplesProductId) then begin 
    Result:= true; 
    end else begin 
    Result:= false; 
    end; 
end; 

function GetSamplesID(Param: String): String; 
begin 
    Result:= SamplesProductId; 
end; 

注あなたRegProductLocation定数のextrenuousスペースがありました。

+0

こんにちはディアナ、答えをありがとう。私には疑問が1つあります。私はスクリプトで製品IDのハードコードを試してみましたが、レジストリからは何も読みません。私はまずメインセットアップをインストールしてから、アドオンセットアップをインストールします。アドオン設定は、製品IDをレジストリに書き込むだけです。したがって、メインセットアップのインストール時に、レジストリに製品IDはありません。アンインストール中にInnoのセットアップで製品IDが読み取られますか?メインセットアップのインストール中に、製品IDがレジストリで使用できなくなるためです。 – Vinoth

関連する問題