sql server错误用户domainname \ machinename $的登录失败

时间:2012-02-09 12:45:58

标签: sql-server

大家好我拥有使用数据库的C#桌面应用程序,我们要求连接字符串应该是基于widows身份验证的。连接字符串是'Data Source = ServerName \ SQL2008R2; Initial Catalog = DatabaseName; Integrated Security = True;'

我们使用Set up项目来部署应用程序。我在安装程序类中添加了代码,以便在完成设置后启动应用程序,如下所示

private void MyInstaller_Committed(object sender,InstallEventArgs e)

    {

        try

        {

            Directory.SetCurrentDirectory(Path.GetDirectoryName

            (Assembly.GetExecutingAssembly().Location));

            Process.Start(Path.GetDirectoryName(

              Assembly.GetExecutingAssembly().Location) + "\\ApplicationName.exe");

        }

        catch(Exception ex)

        {

            MessageBox.Show(ex.Message);

        }

    }

在Windows XP上一切正常。但是在Windows 7上完成设置后第一次启动应用程序时会抛出sql异常“登录失败的用户'DomainName \ WENATEHEE $''但是当我从程序菜单中明确启动此应用程序时,它工作正常。我已经向用户提供了所有必需的权限。经过深入观察,我发现在第一次启动应用程序时,它在sql server中以DomainName \ MachineName $登录,而不是DomainName \ User。

我没有得到任何解决方案。任何帮助将不胜感激

提前致谢

1 个答案:

答案 0 :(得分:0)

安装过程包括两个阶段“立即模式”和“延迟模式”。后者使用“Windows Installer Service”来执行其脚本,因为它们可能需要提升权限 您的应用程序首次在LocalSystem帐户的上下文中(在此帐户的上下文中运行Windows Installer Service时)在第二阶段(之前提到的“延期模式”)中启动,因为您的应用程序正在连接到外部系统必须使用机器帐户'DomainName \ WENATEHEE $'(不是LocalSystem帐户)进行身份验证。
这就是为什么你看到'登录失败的用户'DomainName \ WENATEHEE $'错误。

尝试使用Installer

派生的类方法添加执行
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
    base.OnAfterInstall(savedState);
    // add you app launching code here 
}