小编Zac*_*lan的帖子

重启后"等待服务连接时达到超时"错误

我有一个自定义编写的Windows服务,我在许多Hyper-V VM上运行.作为正在运行的一些自动化测试的一部分,VM每小时重启几次.该服务设置为自动启动,几乎所有时间,它启动正常.

但是,也许有5%的时间,没有我能辨别的模式,服务无法启动.当它失败时,我在事件查看器中收到错误说

等待我的服务名称服务连接时达到超时(30000毫秒).

发生这种情况时,我可以手动启动服务,或者重新启动,服务将正常启动.

我无法弄清楚的是,我的代码中似乎没有发生30秒的超时.我的服务类的OnStart()方法的第一行将"Starting ..."记录到其log4net日志中.当服务无法启动时,我甚至都没有记录任何内容,这表明log4net无论出于何种原因都无法登录,或者在我的OnStart()被调用之前发生了超时.

该服务运行在各种操作系统上,从XP一直到Win7和2008R2,我知道将服务设置为延迟启动可以解决这个问题,对于Vista及更高版本,但这似乎是一个黑客.

我无法对此进行远程调试,因为它间歇性地发生并且在系统启动期间,我不知道如何进一步尝试弄清楚发生了什么.有任何想法吗?

.net c# windows-services timeout

45
推荐指数
2
解决办法
6万
查看次数

用于管理主目录的最佳版本控制系统

我有3台Linux机器,并希望通过某种方式将dotfiles保持在主目录中同步.有些文件,如.vimrc,在所有3台机器上都是相同的,有些文件对每台机器都是唯一的.

我之前使用过SVN,但关于DVCS的所有嗡嗡声让我觉得我应该尝试一下 - 是否有一个特别适合这个?或者我应该坚持使用SVN?

linux version-control

10
推荐指数
2
解决办法
3087
查看次数

使用Windows服务的凭据启动进程

我有一个运行为mydomain\userA的Windows服务.我希望能够从服务中运行任意.exes.通常,我使用Process.Start()并且它工作正常,但在某些情况下我想以不同的用户(mydomain\userB)运行可执行文件.

如果我更改ProcessStartInfo,我用来启动进程以包含凭据,我开始收到错误 - 或者是一个错误对话框,显示"应用程序无法正确初始化(0xc0000142).单击确定以终止应用程序."或者"访问被拒绝"Win32Exception.如果我从命令行运行进程启动代码而不是在服务中运行它,则进程将使用正确的凭据开始(我已通过设置ProcessStartInfo来运行whoami.exe并捕获命令行输出来验证这一点) ).

我也尝试使用WindowsIdentity.Impersonate()进行模拟,但这没有用 - 据我所知,模拟只会影响当前线程,启动新进程会继承进程的安全描述符,而不是当前线程.

我在一个独立的测试域中运行它,因此userA和userB都是域管理员,并且两者都在域范围内具有"登录即服务"权限.

.net c# windows-services

9
推荐指数
2
解决办法
1万
查看次数

如何使用WPF的UI自动化向AutomationElement发送右键单击事件?

使用WPF的内置UI自动化,将左键单击事件发送到AutomationElement(例如Button)很容易(尽管非常详细):

InvokePattern invokePattern = (InvokePattern) element.GetCurrentPattern(InvokePattern.Pattern);
invokePattern.Invoke();
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有内置方法可以向同一元素发送右键单击.我已经辞职了,使用P/Invoke调用SendInput,但我无法让它工作.使用下面的代码,当我调用RightClick()时,会在光标所在的位置弹出一个上下文菜单,而不是在我希望右键单击的元素上.所以它似乎忽略了我交给的坐标,只是使用了当前的光标位置.

public static void RightClick(this AutomationElement element)
{
    Point p = element.GetClickablePoint();

    NativeStructs.Input input = new NativeStructs.Input
    {
        type = NativeEnums.SendInputEventType.Mouse,
        mouseInput = new NativeStructs.MouseInput
        {
            dx = (int) p.X,
            dy = (int) p.Y,
            mouseData = 0,
            dwFlags = NativeEnums.MouseEventFlags.Absolute | NativeEnums.MouseEventFlags.RightDown,
            time = 0,
            dwExtraInfo = IntPtr.Zero,
        },
    };

    NativeMethods.SendInput(1, ref input, Marshal.SizeOf(input));

    input.mouseInput.dwFlags = NativeEnums.MouseEventFlags.Absolute | NativeEnums.MouseEventFlags.RightUp;

    NativeMethods.SendInput(1, ref input, Marshal.SizeOf(input));
}

internal static class NativeMethods
{
    [DllImport("user32.dll", SetLastError …
Run Code Online (Sandbox Code Playgroud)

.net c# testing wpf ui-automation

5
推荐指数
1
解决办法
7798
查看次数