4


0

Windows 7での不正アクセスの例外

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

パスが正しいのにそのファイルにアクセスできない理由は何ですか? しかし、インストールでは、ファイルとフォルダーはうまく作成されますか?

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();

ありがとう

3 Answer


4


UACのため、プログラムは管理者権限を取得していません。

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

'' '' '

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

File.WriteAllText(Path.Combine(path, "License.lic"), Convert.ToBase64String(sharedkey.Key));


3


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

    ///
    /// Gets the path where we store Application Data.
    ///
    /// The Application Data path
    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;
    }


2


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