我当前的项目涉及部署作为Windows服务运行的升级后的.exe文件.为了用新版本覆盖现有的.exe,我目前需要:
我想避免重启,这样就可以完全编写脚本/自动升级.
有什么办法可以避免重启吗?也许一个命令行工具会迫使Windows放弃它对旧的.exe的死亡控制?
windows filesystems scripting operating-system windows-services
想象一下以下场景:
我正在使用SQL Server 2005.我有一个事务,在其他SQL语句中调用一个内部也有事务的存储过程.外部事务有时会失败,并在成功调用和提交存储过程后回滚.
我的问题是,存储过程的事务是否也回滚了?
我正在尝试使用.NET 3.5 System.DirectoryServices.AccountManagement命名空间通过SSL加密的LDAP连接验证针对我们的Active Directory LDAP服务器的用户凭据.这是示例代码:
using (var pc = new PrincipalContext(ContextType.Domain, "sd.example.com:389", "DC=sd,DC=example,DC=com", ContextOptions.Negotiate))
{
    return pc.ValidateCredentials(_username, _password);
}
此代码在不安全的LDAP(端口389)上工作正常,但我宁愿不以明文形式传输用户/传递组合.但是,当我更改为LDAP + SSL(端口636)时,我得到以下异常:
System.DirectoryServices.Protocols.DirectoryOperationException: The server cannot handle directory requests.
  at System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError(Int32 error)
  at System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind()
  at System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap(NetworkCredential creds, ContextOptions contextOptions)
  at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)
  at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)
  at (my code)
端口636适用于其他活动,例如查找该LDAP/AD条目的非密码信息...
UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, _username)
...所以我知道这不是我的LDAP服务器的SSL设置,因为它适用于其他查找的SSL.
有没有人接到ValidateCredentials(...)通过SSL工作的电话?你能解释一下吗?或者是否有另一种/更好的方法可以安全地验证AD/LDAP凭据?
作为自动启动/停止某些NServiceBus服务的努力的一部分,我想知道服务何时完成处理其输入队列中的所有消息.
问题是,当NServiceBus服务正在运行时,我的C#代码报告的消息少于实际消息.所以当剩下一条消息时,它认为队列是空的.如果服务停止,它将报告"正确"的消息数.这很令人困惑,因为当我使用"计算机管理"应用程序中的"专用队列"视图自行检查队列时,它会显示"正确"的数字.
我正在使用以下C#代码的变体来查找消息计数:
var queue = new MessageQueue(path);
return queue.GetAllMessages().Length;
我知道当有很多消息时,这会表现得非常糟糕.我正在检查的队列一次只能有一些消息.
任何见解或建议将不胜感激!
更新:我应该提到此服务是在分发服务器后面,在尝试关闭此服务之前,该服务器已关闭.所以我有信心不会将新消息添加到服务的输入队列中.
我有一个.sln文件,里面有几个项目.为了保持这个简单,我们称之为......
...其中A是引用B和C的主项目.我的目标是更新我的构建脚本,为ProjectA生成XML"Intellisense"文档文件,而不提供有关B和C缺少文档的构建警告.
我有一个MSBuild脚本,在构建步骤中包含以下内容:
<PropertyGroup>
    <CustomOutputPath>C:\build\output\</CustomOutputPath>
</PropertyGroup>
<ItemGroup>
    <Projects Include="ProjectA\ProjectA.csproj">
        <Properties>OutputPath=$(CustomOutputPath)</Properties>
    </Projects>
</ItemGroup>
<MSBuild Projects="@(Projects)" />
(ItemGroup中实际列出了多个项目,但同样,让我们保持这个简单.)
当我运行构建脚本时,它足够聪明,可以为我编译B,C和A,即使我只指定了A.所有输出都出现在"CustomOutputPath"位置.
如果我将"DocumentationFile"属性添加到我的项目条目中......
<ItemGroup>
    <Projects Include="ProjectA\ProjectA.csproj">
        <Properties>OutputPath=$(CustomOutputPath);DocumentationFile=ProjectA.xml</Properties>
    </Projects>
</ItemGroup>
...然后'ProjectA.xml'出现在"CustomOutputPath"中.但是,我还在项目文件夹中为所有三个项目获取名为"ProjectA.xml"的文件:
这些文件包含各自项目的"Intellisense"文档,即使它们都被命名为"ProjectA.xml".
这会在项目文件夹中创建不受欢迎且误导性命名的文件,并且(更重要的是)为B和C中缺少的文档注释生成构建警告.我不想为这些项目添加文档注释,所以我更喜欢找到让MSBuild仅为ProjectA生成文档的方法.
任何人都可以提供任何见解或替代解决方案吗?
我需要测试一些ASP.NET代码,它们通过调用MS-SQL数据库来处理超时异常.
我能够减少连接上的CommandTimeout参数,但这可能会在到达我的代码之前导致错误.
是否有一种简单的方法可以使数据库在"提示"上超时?
c# ×3
.net ×1
c#-4.0 ×1
filesystems ×1
ldap ×1
msbuild ×1
msbuild-task ×1
msmq ×1
nservicebus ×1
scripting ×1
sql ×1
sql-server ×1
timeout ×1
transactions ×1
windows ×1
winforms ×1