Невозможно получить доступ к файлу .mdf после установки приложения с помощью проекта установки Visual Studio

Я создал приложение WPF. Я использую проект установки Visual Studio для создания установки приложения.

В моем приложении у меня есть локальная база данных, которая находится в папке проекта (папка приложения). Когда я устанавливаю приложение на любой другой диск, кроме диска C: (диск операционной системы), оно работает нормально. Но когда я устанавливаю приложение на диск C:, мое приложение не может получить доступ к файлу базы данных. Кроме того, когда я подключаю базу данных к SQL Server Management Studio, она подключается только для чтения:

введите здесь описание изображения

Кроме того, я просмотрел Eventviewer и обнаружил эту ошибку:

введите здесь описание изображения

Я попытался добавить файл .mdf в папку Programdata, но проблема не решена. Я знаю, что это проблема, связанная с разрешением. Но есть ли способ решить эту проблему с помощью проекта установки Visual Studio?


person Manprit Singh Sahota    schedule 27.05.2018    source источник
comment
Файл .mdf - это файл базы данных SQL Server, поэтому для его использования на этом компьютере должен быть установлен SQL Server Express. Вы устанавливаете эту зависимость в своем приложении?   -  person marc_s    schedule 27.05.2018
comment
@marc_s: Да, я добавил предварительные требования к приложению. Кроме того, я упомянул, что могу запустить приложение, как и ожидалось, на любом другом диске, кроме диска с операционной системой (диск C).   -  person Manprit Singh Sahota    schedule 27.05.2018


Ответы (1)


Используйте класс установщика и напишите ниже код в методе фиксации. Вы должны дать разрешение на чтение / запись для файла mdf. Вы можете указать это в строке кода ниже; убедитесь, что ваш установочный каталог также имеет разрешение на запись.

string directoryName = @"C:\rnd\ConsoleApplication16\ConsoleApplication16\";
        string SharedCachePath = @"C:\rnd\ConsoleApplication16\ConsoleApplication16\xyz.mdf";
        var fs = File.GetAccessControl(directoryName);
            fs.SetAccessRuleProtection(false, true);
            File.SetAccessControl(SharedCachePath, fs);

вы можете проверить здесь для использования класса установщика. Надеюсь, это сработает и решит вашу проблему.

person Gulam Husain Ansari    schedule 27.05.2018
comment
Спасибо за большую помощь. Я могу решить проблему. Я сделал небольшое изменение, предоставив доступ к папке, содержащей файлы моей базы данных, поскольку у меня есть отдельная папка для файлов базы данных. :) - person Manprit Singh Sahota; 27.05.2018