4

起動時にライセンスファイルを読み取るアプリケーションがあります。私のインストールでは、アプリケーションのプログラムファイルにフォルダーを作成し、ライセンスフォルダーを作成して、そこにライセンスファイルを配置します。ただし、アプリケーションを実行しようとすると、ライセンスファイルを読み取って更新する必要があります。これを実行しようとすると、「不正アクセス例外」が発生します。管理者としてログオンし、プログラムを手動で実行しています。

パスが正しいのになぜそのファイルにアクセスできないのか、何か考えはありますか?しかし、インストールでは、ファイルとフォルダーは問題なく作成されますか?

MyApplication.exeがあり、ライセンスリーダーはMyApplicationToolsと呼ばれる別のDLLにあります。私は次のようにライセンスファイルを読み書きしています:

       //Read
       StreamReader reader = new StreamReader(path + "license.lic");

       //Write
       StreamWriter writer2 = new StreamWriter(path + "License.lic");
       string str = Convert.ToBase64String(sharedkey.Key);
       writer2.WriteLine(str);
       writer2.Close();

ありがとう

4

3 に答える 3

4

UACが原因で、プログラムは管理者権限を取得していません。

プログラムを右クリックし、[管理者として実行]をクリックして、再試行します。Windowsに常に管理者として実行するように指示するマニフェストを作成する
こともできます。 ただし、管理者権限を必要としないユーザーのAppDataフォルダーにライセンスファイルを配置することを検討する必要があります。


ちなみに、Path.Combineパスを作成するには、このメソッドを使用する必要があります。
また、ファイルに1つの文字列を書き込むだけの場合は、を呼び出す必要がありますFile.WriteAllText
例えば:

File.WriteAllText(Path.Combine(path, "License.lic"), Convert.ToBase64String(sharedkey.Key));
于 2009-12-31T21:50:08.107 に答える
3

代わりにAppDataを使用してください。このための環境変数があります。これは、エクスプローラーに移動して%appdata%と入力することで確認できます。適切なフォルダに移動します。C#でこれにアクセスするために、次の関数を作成しました。

    /// <summary>
    /// Gets the path where we store Application Data.
    /// </summary>
    /// <returns>The Application Data path</returns>
    public static string GetAppDataPath()
    {
        string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        dir = System.IO.Path.Combine(dir, "MyCompany\\MyApplication");
        System.IO.Directory.CreateDirectory(dir);

        return dir;
    }
于 2009-12-31T22:12:33.790 に答える
2

書き込み可能なファイルをユーザー アプリケーション フォルダーに配置する必要があります。Program Files は、通常のユーザーは書き込みできません。Iirc、Win7 では、デフォルトの場所は C:\Users\[username]\AppData\[appname] です。Program Files に書き込むためだけに管理者として実行するべきではありません。

于 2009-12-31T21:57:52.070 に答える