【问题标题】:Run .net code in a separate process在单独的进程中运行 .net 代码
【发布时间】:2008-11-20 14:49:15
【问题描述】:

在与 Sharepoint 相关的模拟场景中,我需要在单独的进程中执行一些代码(该进程将在某个用户的上下文中运行)。我不想启动单独的应用程序,基本上我只想对一个方法执行“运行方式”。

【问题讨论】:

    标签: .net concurrency process


    【解决方案1】:

    我自己还没有尝试过,但 this seems 可以做到这一点。

    如果模拟方法阻塞直到完成,它应该可以工作。 所以你的代码会是这样的:

    ...
    WrapperImpersonationContext context = new WrapperImpersonationContext(domain, username, password);
    context.Enter();
    
    Results res = MyImpersonatedMethod(data);
    
    context.Leave();
    ...
    

    希望这会有所帮助。

    【讨论】:

    【解决方案2】:

    如果您有适当的用户、密码和域,Process.Start 方法有一个重载来启动进程。

    您要做的是创建一个 ProcessStartInfo 对象并在启动进程时指定正确的用户名和密码。所以你可以这样做:

    Dim psiNewProcess As New ProcessStartInfo("Notepad.exe")
    
    psiNewProcess.UserName = "MyUserName"
    psiNewProcess.Password = "MyPassword"
    
    Process.Start(psiNewProcess)
    

    哦,如果尚未为您的项目导入 Process,则 Process 位于 System.Diagnostics 命名空间中。

    编辑:快速旁注,密码字段实际上是一个 SecureString 类型的对象,因此 MSDN 建议以这种方式填充值:

    Dim instance As ProcessStartInfo
    Dim value As SecureString
    
    value = instance.Password
    
    instance.Password = value
    

    【讨论】:

    • 我不想启动新的应用程序。是否可以使用 ProcessStartInfo 从我创建新进程的应用程序中运行一段代码?
    • 不,不可能使用 ProcessStartInfo 来做到这一点。
    【解决方案3】:

    "在单独的进程中执行代码" = "启动单独的应用程序"。

    我的意思是,你可以启动一个进程,然后向它发出请求以运行特定的方法……但不清楚这是否是你想要的。

    【讨论】:

    • 你能指出在哪里可以找到关于这个主题的更多信息,也许是一个例子。这就是我想做的。
    • 基本上,您需要启动一个新进程(一次)并通过命名管道(或其他任何方式)进行通信。如果您使用的是 .NET 的最新版本,WCF 可能是最佳选择 - 所以请选择 WCF 书籍或教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多