Я пытаюсь обнаружить, что SQL Server Compact Edition установлен в системе или нет - PullRequest
0 голосов
/ 07 мая 2019

Один и тот же код ведет себя по-разному в консольном приложении и приложении WPF.

Когда я вызываю метод в приложении WPF, он возвращает true, даже если SQL Server CE не установлен; однако тот же код, запущенный в консольном приложении, возвращает false.

Я нашел способ, но кажется, что два ведут себя из одного и того же кода, один в консольном приложении и один в приложении WPF! Что имеет значение?

Я записал каждый шаг в шоке, чтобы увидеть, как он возвращает true в WPF

public static bool IsSQLCeV40Installed()
{
        var result = false;

        try
        {
            System.Reflection.Assembly.Load("System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
            result = true;
            _logger.Info($"IsSQLCeV40Installed: IsSqlCe {result}");
        }
        catch (System.IO.FileNotFoundException)
        {
            _logger.Info("IsSQLCeV40Installed: File Not Found Exception");
        }
        catch (Exception)
        {
            _logger.Info("IsSQLCeV40Installed: General Exception");
        }

        return result;
}

WPF печатает это:

IsSQLCeV40Installed: IsSqlCe & returns true

Консольное приложение регистрирует это:

IsSQLCeV40Installed: File Not Found Exception & returns false

Однако оба должны возвращаться, как это делает консольное приложение, если на компьютере не установлен SQL Server CE!

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Одно из приложений, скорее всего, построено для x86, а другое AnyCPU или x64, и поэтому они выглядят либо в 32-битном .NET Framework GAC, либо в 64-битном .NET Framework GAC.

Дополнительные советы здесь: http://erikej.blogspot.com/2010/05/how-to-detect-if-x64-sql-compact-35-sp2.html

0 голосов
/ 08 мая 2019

Если ваше приложение использует sql ce и определенную версию, вы можете просто скопировать dll в то же место, где находится ваш exe-файл, и тогда нет необходимости устанавливать их. Таким образом, нет необходимости проверять, установлены ли они.

Делайте это с любым установщиком или методом распространения, который вы используете для приложения. Это всего лишь filecopy / xcopy, а не установка, и, конечно, она будет отлично работать с установкой копии файла с сервера Windows.

Если у вас много приложений, использующих sql ce, это, конечно, будет несколько бесполезным из-за дискового пространства на клиентском компьютере. Обычно это не проблема. Я думаю, что под 5 мег.

Как правило, я бы также советовал вам избегать логики управления программами путем обработки ошибок. Там, где вы можете избежать рутины рулевого управления, попробуйте сделать это. В этом случае вы можете проверить, существует ли одна из нескольких возможных записей в реестре пользователя.

...