0

NSIS スクリプトを書きたかったので、とりあえず setup.nsi と呼び、$SYSDIR に必要な dll ファイルがいくつか存在するかどうかを確認します。

「いくつか」という言葉を強調させてください

nsis IfFileExists のドキュメントから私が理解していることは、次のように入力した場合です。

IfFileExists $SYSDIR\blabla.dll +2 +1

次に、blabla.dll が $SYSDIR にあるかどうかをチェックします。しかし、setup.nsi がファイル (つまり、インストールしたい *.dll) をコピーする場所から *.dll かどうかを知りたい場合はどうでしょうか。それらの多く..すべての名前をチェックすることはできません)$SYSDIRに存在します

アンインストール中に、$SYSDIR からそれらを削除できるようにしたいと考えています (いくつかの uninstall.log を使用して、実際に $SYSDIR にコピーしたかどうかを確認し、ワイルドカードの質問を再度行います)。

私は NSIS スクリプトにまったく慣れていないので、しばらくお待ちください。

4

3 に答える 3

2

での書き込みと削除は本当に必要$SYSDIRですか? あなたのファイルがシステムファイルでない限り、$__SYS__DIR にある理由はありません。特定のバージョンのライブラリを使用する必要がある場合は、DLL リダイレクトを検討してください (DLL をアプリ ディレクトリに配置し、.local 機能を使用します) 。DLL リダイレクトとサイド バイ サイド アセンブリに関する MSDN の記事を参照してください。

さらに、1 つの入力ミスでユーザーのコンピューターが破壊されることはありません (「削除: C:\Windows\System32\user32.dll」)。

于 2009-11-09T09:25:53.630 に答える
0

Piskvor が言及しているように、アンインストーラーでシステム DLL を削除することについて心配する必要はないと思います。システム DLL を更新されたバージョンで上書きする場合は、SetOverwriteコマンドを参照してください。持っているファイルが新しい場合は、ファイルを上書きできます。

于 2009-12-23T22:02:17.973 に答える
0

Windows XP (SP2?) 以降には system32 のファイル保護があるため、そこにあるシステムの重要なファイルを上書きすることはできません。

それを避けるようにしてください。

また、ファイルを具体的に確認するには、チェックサムを計算してアンインストール時に比較できる NSIS 用のプラグインがあるかどうかを確認してください。本当に必要な場合は、おそらく最も安全です。

ファイルを別の場所にインストールし、それをPATHに追加することをお勧めします。

于 2009-12-23T22:09:34.700 に答える