1

app.config ファイルに単一のユーザー名とパスワードを保存するアプリケーションがあります。現在、ユーザーが変更できるように、実行時に app.config を書き込み可能にしています。

セットアップ プロジェクトを使用したインストール時に問題が発生し、app.config がプログラム ファイルにインストールされ、どのユーザーも書き込みできません。

そのため、インストール時に app.config の場所を共通ファイル フォルダーに変更し、すべてのユーザーが読み書きできるようにしました。

現在、インストール時に、そこに保存されているデータにまったくアクセスできないようです。たとえば、 ConfigurationManager.AppSettings["networkPath"] を使用すると、空の文字列が返されます。

私は何を間違っていますか?

4

1 に答える 1

0

次の 2 つの方法で実行できます。

  1. インストーラーによって、プログラム ファイル内のアプリ構成ファイルに特別なアクセス許可を付与します。innosetup を使用して実行します。それができない場合は、プログラムの起動から実行してください。

    static void Main()
    {
        GrantAccess()
    }
    
    private static bool GrantAccess()
    {
        FileInfo fInfo = new FileInfo(Assembly.GetEntryAssembly().Location + ".config");
        FileSecurity dSecurity = fInfo .GetAccessControl();
        fSecurity.AddAccessRule(new FileSystemAccessRule("everyone", 
                                                         FileSystemRights.FullControl, 
                                                         AccessControlType.Allow));
        fInfo .SetAccessControl(fSecurity);
        return true;
    }
    
  2. それ以外の場合は、別の場所を選択して appconfig ファイルを配置し、次のように読み取ることができます。

    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Assembly.GetEntryAssembly().GetName().Name) + ".exe.config";
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
                                                                           ConfigurationUserLevel.None);
    return config.AppSettings.Settings["Key"].Value);
    

私の意見では、これは悪い選択です。

于 2012-05-08T19:44:24.467 に答える