小编Mat*_*sen的帖子

使用Process.Start()以Windows服务中的不同用户身份启动进程

我想定期在Windows服务的指定用户帐户下运行任意.NET exe.

到目前为止,我已经让我的Windows服务运行逻辑来决定目标进程是什么,以及何时运行它.目标进程以下列方式启动:

  1. Windows服务使用"管理员"凭据启动.
  2. 到时候,执行一个中间的.NET进程,其参数详细说明应该启动哪个进程(文件名,用户名,域名,密码).
  3. 此过程创建一个新的System.Diagnostics.Process,将ProcessStartInfo对象与传递给它的参数相关联,然后在进程对象上调用Start().

第一次出现这种情况,目标进程执行罚款,然后正常关闭.然而,每次后续时间,一旦目标进程启动,它就会抛出错误"应用程序无法正常运行(0xc0000142)".重新启动Windows服务将允许进程再次成功运行(第一次执行).

当然,目标是每次都成功执行目标进程.

关于上面的步骤2:要以不同的用户身份运行进程.NET调用win32函数CreateProcessWithLogonW.此函数需要一个窗口句柄来记录指定的用户.由于Windows服务未在交互模式下运行,因此它没有窗口句柄.这个中间过程解决了这个问题,因为它有一个可以传递给目标进程的窗口句柄.

请不要使用psexec或windows任务规划器的建议.我已经接受了我的生活,包括以上述方式解决问题.

.net c# service windows-services process

35
推荐指数
1
解决办法
4万
查看次数

为什么这个简单的.NET控制台应用程序有这么多线程?

这个简单的程序从15个线程开始 - 根据计数.有时在它的一生中它会掉落一些,但它们会回来.

class Program
 {
     static void Main(string[] args)
     {
         while (true)
         {
             Console.WriteLine(Process.GetCurrentProcess().Threads.Count);
             Thread.Sleep(500);
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

我期待的过程,只是有一个线程(和我的直觉是由备份这个)

没有调试器,该进程只有(!)4个线程.当然任何CLR的东西都会隐藏在我的进程中?

这有多重要?这个过程真的有那么多线程吗?为什么?

.net c# multithreading

33
推荐指数
3
解决办法
3634
查看次数

在C#中反转1位

我有1位byte(总是在最低位置),我想要反转.即给定00000001我想获得00000000和00000000我想要00000001.

我这样解决了:

bit > 0 ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

我很想知道如何做到这一点.

.net c# bit-manipulation

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

Crosswalk WebView中启用了Chrome的数据保护功能?

在Chrome版本45.0.2454.85中,每当我连接到手机上的Cordova/Crosswalk应用程序时,开发人员工具会在窗口顶部显示黄色警告,并显示文本:" 在调试时考虑禁用Chrome数据保护程序 ".

是否在Crosswalk插件(版本1.2,WebView版本44.0.2403.117)中启用了数据保护程序?如果是这样,我可以将其关闭吗?

android google-chrome cordova crosswalk-runtime

15
推荐指数
0
解决办法
752
查看次数

在发布模式下Console.SetOut出现问题?

我在我的代码中有一堆Console.WriteLines,我可以在运行时观察到.我与我也写过的本地库进行通信.

我想在本地库中粘贴一些printf并观察它们.但是我没有在运行时看到它们.

我创建了一个令人费解的hello world应用程序来演示我的问题.当应用程序运行时,我可以调试到本机库并看到调用hello world.输出永远不会落在文本作者身上.请注意,如果相同的代码作为控制台应用程序运行,那么一切正常.

C#:

    [DllImport("native.dll")]
    static extern void Test();

    StreamWriter writer;

    public Form1()
    {
        InitializeComponent();

        writer = new StreamWriter(@"c:\output.txt");
        writer.AutoFlush = true;
        System.Console.SetOut(writer);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Test();
    }
Run Code Online (Sandbox Code Playgroud)

和原生部分:

__declspec(dllexport) void Test()
{
    printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

更新:下面的hamishmcn开始讨论调试/发布版本.我在上面的button1_click方法中删除了本机调用,只是用标准的Console.WriteLine.net调用替换它.当我在调试模式下编译并运行它时,消息被重定向到输出文件.当我切换到释放模式时,呼叫没有被重定向.控制台重定向似乎只在调试模式下工作.我该如何解决这个问题?

.net c c#

13
推荐指数
1
解决办法
1827
查看次数

我无法突破我的ClipRectangle,我想哭

当重写自定义控件的OnPaint方法时,我提供了一个PaintEventArgs,它包含一个Graphics对象和一个ClipRectangle.ClipRectangle对我的口味来说太小了,所以我想要将它扩展为100像素,或者完全忽略它.

无论我做什么,我似乎都无法突破ClipRectangle.到目前为止,我已经尝试过:

e.ClipRectangle.Inflate(100, 0);
e.Graphics.ResetClip();
e.Graphics.SetClip(new Rectangle(x, y, w, h));
Run Code Online (Sandbox Code Playgroud)

父控件调用Invalidate(true)(强制所有子控件的子控件失效).

我也做了一些谷歌搜索,看着鲍勃鲍威尔的网站,但找不到核武器.

ResetClip将Graphics对象的剪切区域重置为无限大的Rectangle,但Graphics对象高兴地继续使用提供的ClipRectangle.

救命.

c# system.drawing custom-controls winforms

12
推荐指数
2
解决办法
2783
查看次数

JSON.stringify额外的引号

考虑:

var d = new Date();
var j = d.toJSON();
var s = JSON.stringify(d);
Run Code Online (Sandbox Code Playgroud)

每个变量的console.log返回:

Tue Jul 29 2014 13:27:19 GMT+0200 (W. Europe Summer Time)
2014-07-29T11:27:19.253Z // a string
"2014-07-29T11:27:19.253Z" // same string as above but packed in ""
Run Code Online (Sandbox Code Playgroud)

我希望他们回归同样的事情,但后来我读了

http://www.json.org/js.html:

如果stringify方法看到包含toJSON方法的对象,则它会调用该方法,并将返回的值字符串化.这允许对象确定自己的JSON表示.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify:

如果要进行字符串化的对象具有名为toJSON的属性,其值为函数,则toJSON方法会自定义JSON字符串化行为:而不是被序列化的对象,调用时toJSON方法返回的值将被序列化.例如:

这是否意味着我总是要做以下事情:

var d = new Date();
var j = d.toJSON();
var s;

if (d.toJSON) {
    s = d.toJSON();
} else {
    s = JSON.stringify(d);
}
Run Code Online (Sandbox Code Playgroud)

确保s == j,因为我不能依赖JSON.stringify不执行两个序列化?

编辑

根据jgillich的回答,以下代码有助于澄清事情(至少对我而言):

var s = …
Run Code Online (Sandbox Code Playgroud)

javascript json

12
推荐指数
1
解决办法
8065
查看次数

皮条客我的LINQ:基于另一篇文章的学习练习

我决定第一次试用LINQ尝试解决这个问题.

我第一次涉足LINQ精彩世界的结果如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() 
            { 
               "fred-064528-NEEDED1", 
               "xxxx", 
               "frederic-84728957-NEEDED2", 
               "sam-028-NEEDED3", 
               "-----", 
               "another-test" 
            };

            var result =
            from s in list
            where (from c in s where c == '-' select c).Count() == 2
            select s.Substring(s.LastIndexOf("-") + 1);

            foreach (string s in result)
                Console.WriteLine(s);
            Console.WriteLine("Press Enter");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何改进上述解决这个人为设计的小例子的方法.我对是否使用了最好的验证方法,或者我如何本地化"按Enter"或类似的东西不太感兴趣; 我只是想使用这个例子来学习更多关于LINQ的知识.

c# linq lambda coding-style

8
推荐指数
1
解决办法
920
查看次数

Type.InvokeMember和引用类型

我正在尝试将Type.InvokeMember(String,BindingFlags,Binder,Object,array [])与默认绑定器一起使用.

对象数组中目标方法的一个参数是设置为null的引用类型.我想要我正在调用的方法来实例化引用类型,以便我可以继续使用它.例如:

using System;

namespace ConsoleApplication6
{
    class A
    {
        public void GetReferenceType(object o)
        {
            o = new object();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            object o = null;
            A a = new A();
            Type t = typeof(A);
            t.InvokeMember("GetReferenceType", System.Reflection.BindingFlags.InvokeMethod, null, a, new object[] { o });

            if (o == null)
            {
                throw new NullReferenceException();
            }
            else
            {
                //do something with o;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方法是提供A一个属性并通过它访问o.

还有其他方法可以不改变A吗?

.net c# reflection

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