Запись файла в C:\ проблема с правами доступа к диску

Я разработал приложение win с С#, которое генерирует файл в папке на диске c:\. при попытке создать файл там возникает проблема с разрешением, но когда приложение создает файл на другом диске, кроме C: \, тогда проблем не возникает. поэтому, когда я буду распространять настройки своих приложений для конечного пользователя, я не буду уверен, что пользователь, который будет устанавливать мои приложения, имеет разрешение на создание файла на диске C: \.

так направьте меня, как я могу преодолеть эту проблему. Должен ли я использовать манифесты для повышения уровня приложения в ОС Win?

у меня есть статья

http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-a-manifest-to-make-an-application-elevate-in-vista.aspx

http://www.codeproject.com/Articles/105506/Getting-Elevated-Privileges-on-Demand-using-C

http://archive.msdn.microsoft.com/KB981778

и т. д. ...... пожалуйста, направьте меня с правильным знанием. Благодарность


person Mou    schedule 15.05.2014    source источник
comment
Вы не хотите повышать разрешения, если в этом нет крайней необходимости. Есть причина, по которой Windows не позволяет любой программе записывать данные непосредственно на диск C:. Вместо этого используйте папку, предназначенную для этой цели, C:\ProgramData.   -  person dub stylee    schedule 15.05.2014
comment
stackoverflow.com/questions/8141795/ для VS2005 support.microsoft.com/kb/944276/en-us   -  person Mou    schedule 15.05.2014
comment
нет папки с именем ProgramData, а есть папка с именем Program Files.   -  person Mou    schedule 15.05.2014
comment
Если вы используете Windows XP, то это будет C:\Documents and Settings\All Users\Application Data. В Windows 7/8 это C:\ProgramData.   -  person dub stylee    schedule 15.05.2014


Ответы (1)


Вы можете снова запустить приложение с повышенным разрешением и проверить его при запуске, чтобы убедиться, что это так. Вот пример: (Будьте осторожны, чтобы не попасть в бесконечный цикл запуска самого приложения.)

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        string[] args = Environment.GetCommandLineArgs();
        if (args.Length > 1 && args[1] == "-e") Text = "Elevated";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Process process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = Application.ExecutablePath,
                Arguments = "-e",
                Verb = "runas",//-Admin.
            }
        };
        process.Start();
    }
}

Я согласен, однако, что хранение информации в «C:», вероятно, не очень хорошая идея. Вы можете попробовать что-нибудь вроде: Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).

person ispiro    schedule 15.05.2014