大家好我拥有使用数据库的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。
我没有得到任何解决方案。任何帮助将不胜感激
提前致谢
答案 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
}