2

アプリの初期インストールで(msiファイルを介して)インストールされるdllがあります。dll にはユーザー キーが含まれており、これは初期インストール用の「デモ」です。ユーザーがライセンスを購入すると、自分の名前を含む別の dll が提供されます。2 番目の dll は最初の dll であり、別の名前で再構築されているため、GUID とファイル名は同じです。これは、win7 テスト マシンで正常に動作します。アプリ ディレクトリの dll を置き換えると、正しく動作します。最近、新しいクライアントにユーザー dll を提供しましたが、replace メソッドが機能していないようです。彼は非常にITに精通しているので、電子メールの指示に従っていると思います(アプリディレクトリのuserdata.dllを添付のものに置き換えます).dllを変更していないようです. Win8(pro)を使用しています。

ユーザーdllをアプリディレクトリにコピーするためのInnoセットアップを彼に送信することを考えていました, Flags:ignorereversion regserver sharedfile

誰かが解決策や説明を提案できますか?

後で...更新されたdllのInnoセットアップを彼に送信しましたが、これは機能します。2 番目の dll メソッドを使用した場合 (良い考えです)、ユーザーにインストールしてもらう必要があります。

4

2 に答える 2

2

元の.dllを置き換えるのではなく、2番目の.dllに顧客固有の情報を提供してみませんか?2番目の.dllは、元の.dllの機能のロックを解除します。

たとえば、元の.dllで、次のことを確認できますCustomer.dll

if(TryLoadAssembly("Customer.dll", out assembly)) {
    if(Validate(assembly)){
        IsUnlocked = true;
    }
}

その他の推奨事項(およびテストされていないサンプル)-Customer.dllに、インターフェイスを実装する単一のオブジェクトを含めます。

class Customer : IToken {
    GUID Guid {get;}
    // other fields
}

検証します:

bool Validate(Assembly assembly){
    Type type = assembly.GetType("Customer");
    IToken customerToken = (IToken)Activator.CreateInstance(type);

    // check some properties
    return customerToken.Guid == application.Guid;
}
于 2013-03-20T20:25:38.730 に答える
0

あなたはそれがDLLを置き換えているようには見えないと言います。UAC がファイルコピーをローカル ストレージにリダイレクトしているのでしょうか?

この場合、対処する最も簡単な方法は、
1) ファイルのコピーを実行できるバッチ ファイルと、それを右クリックして [管理者として実行] を選択してバッチ ファイルを起動する手順を提供することです。 .
2) ファイルのコピーを実行できる実行可能ファイルを提供します。バッチ ファイルのように管理者として exe を実行する指示を含めるか、アプリケーションにマニフェストを含めて、ファイルを管理者として実行する必要があるウィンドウに指示することができます。

トラブルシューティングに役立つ可能性がある最後のオプションは、ユーザーに UAC をオフにして、ファイルのコピーを再試行してもらうことです。それが機能する場合、このユーザーは満足し、問題が何であるかがわかり、将来の顧客のために洗練された解決策を見つけることができます.

Win 8 ラップトップを調べたところ、UAC のオプションは [コントロール パネル] - [ユーザー アカウント] - [ユーザー アカウント] - [ユーザー アカウント制御設定の変更] にあります。これにより、UAC をオフにするために一番下までスライドできるスライダーが表示されます。
(ユーザー アカウントは実際には 2 回表示されます。)

于 2013-03-20T20:54:41.810 に答える