小编Shr*_*ike的帖子

如何从Windows服务启动进程到当前登录的用户会话

我需要从Windows服务启动一个程序.该程序是用户UI应用程序.此外,该应用程序应在特定用户帐户下启动.

问题是Window Services在会话#0中运行,但登录的用户会话是1,2等.

所以问题是:如何从窗口服务启动一个进程,使其在当前登录的用户会话中运行?

我强调的问题不在于如何在特定帐户下启动流程(很明显 - Process.Start(new ProcessStartInfo(".."){UserName = ..,Password = ..})).即使我安装我的Windows以在当前用户帐户下运行,该服务仍将在会话#0中运行.设置"允许服务与桌面交互"没有帮助.

我的Windows服务是基于.net的.

更新:首先,.NET在这里无关,它实际上是纯Win32的东西.这就是我正在做的事情.以下代码在我的Windows服务中(C#使用win32函数通过P/Inkove,我跳过导入签名,它们都在这里 - http://www.pinvoke.net/default.aspx/advapi32/CreateProcessWithLogonW.html):

    var startupInfo = new StartupInfo()
        {
            lpDesktop = "WinSta0\\Default",
            cb = Marshal.SizeOf(typeof(StartupInfo)),
        };
    var processInfo = new ProcessInformation();
    string command = @"c:\windows\Notepad.exe";
    string user = "Administrator";
    string password = "password";
    string currentDirectory = System.IO.Directory.GetCurrentDirectory();
    try
    {
        bool bRes = CreateProcessWithLogonW(user, null, password, 0,
            command, command, 0,
            Convert.ToUInt32(0),
            currentDirectory, ref startupInfo, out processInfo);
        if (!bRes)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
    }
    catch (Exception …
Run Code Online (Sandbox Code Playgroud)

.net windows-services

44
推荐指数
6
解决办法
7万
查看次数

在WinDbg中如何处理"SOS版本与您正在调试的CLR版本不匹配"?

我的一些应用程序出了问题.它是在Windows 2003 Server(x86)中的IIS6下运行的基于wcf的应用程序:
在事件日志中,我从"W3SVC-WP"源(EventID = 2262)得到这样的错误:

ISAPI 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.
Run Code Online (Sandbox Code Playgroud)

我正在尝试弄清楚发生了什么.我已按照此KB中的描述为Orphan Worker Process设置了转储.发生死锁时会创建一个小型转储.
然后我拿这个小型泵试图了解发生了什么.这是我被困住了.

我运行WinDbg x86,打开我的转储然后:

0:037> .loadby sos clr
0:037> .sympath SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
0:037> !clrstack
The version of SOS does not match the version of CLR you are debugging.  Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: …
Run Code Online (Sandbox Code Playgroud)

.net debugging minidump windbg sos

42
推荐指数
4
解决办法
2万
查看次数

IIS在IIS + TransportCredentialOnly/Windows auth中在basicHttpBinding中托管WCF服务+ Windows身份验证

我想创建一个在IIS6中托管的WCF服务,并在IIS中禁用匿名身份验证.并且不要使用SSL.

所以我唯一的方法是使用basicHttpBinging TransportCredentialOnly,不是吗?

我创建一个虚拟目录,设置Windows Integrated Auth并取消选中"启用匿名访问".

这是我的web.config:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyBinding">
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <services>
            <service name="Samples.ServiceFacadeService" behaviorConfiguration="ServiceFacadeServiceBehavior">
                <endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
                          contract="Samples.IServiceFacadeService">
                </endpoint>
            </service>
        </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceFacadeServiceBehavior">
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

您可以看到我甚至没有将MEX-enpoint包含在元数据交换中.使用TransportCredentialOnly安全性只有一个端点和一个绑定.

但是当我尝试启动服务(通过客户端代理调用方法)时,我在EventLog中遇到了这样的异常:

异常:System.ServiceModel.ServiceActivationException:由于编译期间发生异常,无法激活服务'/wcftest/ServiceFacadeService.svc'.异常消息是:该服务的安全设置需要"匿名"身份验证,但它没有为承载此服务的IIS应用程序启用.. ---> System.NotSupportedException:该服务的安全设置需要"匿名"身份验证,但它没有为承载此服务的IIS应用程序启用.

我不知道为什么我的服务需要Anonymous auth?为什么?

iis wcf

21
推荐指数
2
解决办法
5万
查看次数

.NET上的线程安全阻塞队列实现

我正在寻找.NET的线程安全阻塞队列的实现.通过"线程安全阻塞队列"我的意思是: - 线程安全访问队列,其中Dequeue方法调用阻塞一个线程,直到其他线程放入(Enqueue)某个值.

到目前为止,我发现了这个:http://www.eggheadcafe.com/articles/20060414.asp (但它适用于.NET 1.1).

有人可以评论/批评这种实施的正确性.或建议另一个.提前致谢.

.net queue collections multithreading

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

"另一个会话使用的事务上下文"的原因是什么

我正在寻找这个错误根源的描述:"另一个会话正在使用的事务上下文".

我有时会在我的一个单元测试中得到它,所以我不能提供repro代码.但我想知道什么是"按设计"错误的原因.

更新:错误从SQL Server 2008返回为SqlException.我收到错误的地方似乎是单线程的.但是我可能有单元测试交互,因为我得到了错误,一次运行几个测试(VS2008sp1中的MSTest).但失败的测试看起来像:

  • 创建一个对象并将其保存在DB-transaction(commit)中
  • 创建TransactionScope
  • 试图打开连接 - 这里我得到了带有这种堆栈跟踪的SqlException:

.

System.Data.SqlClient.SqlException: Transaction context in use by another session.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
   at System.Data.SqlClient.SqlInternalConnectionTds.PropagateTransactionCookie(Byte[] cookie)
   at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
   at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
   at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
   at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection …
Run Code Online (Sandbox Code Playgroud)

.net sql-server transactions transactionscope

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

Django中的Ntlm/Kerberos身份验证

我正在寻找有关在django应用程序中添加Windows身份验证支持的指南,特别是OSQA

我知道http://code.google.com/p/python-ntlm/ 并且还看到了这篇文章:http://erny-rev.blogspot.com/2007/11/ntlm-authentication-in-django .html 但我不是Django-dev,我只是想在Windows环境中部署OSQA(内联网,所以我需要添加Windows身份验证).所以我正在寻找简单的逐步描述.

(我已经设法在Windows上使用SQL Server部署OSQA站点并且它正在运行)

更新:
我不仅要获得针对AD的身份验证,还要避免在IE中使用类似SSO的行为.当用户在IE中访问我的基于django的站点时,它会自动通过其域帐户进行身份验证.

django windows-authentication

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

如何从WebApi消息处理程序中优雅地返回异常

我在我的Mvc\WebApi应用程序中有一个全局ExceptionFilter,注册为:

public virtual void RegisterHttpFilters(HttpConfiguration config)
{
    config.Filters.Add(new MyExceptionFilter(_exceptionHandler));
}
Run Code Online (Sandbox Code Playgroud)

MyExceptionFilter的位置是:

public class MyExceptionFilter : ExceptionFilterAttribute
{
    private readonly IMyExceptionHandler m_exceptionHandler;

    public MyExceptionFilter(IMyExceptionHandler exceptionHandler)
    {
        m_exceptionHandler = exceptionHandler;
    }

    public override void OnException(HttpActionExecutedContext context)
    {
        Exception ex = context.Exception;
        if (ex != null)
        {
            object response = null;
            HttpStatusCode statusCode = m_exceptionHandler != null
                ? m_exceptionHandler.HandleException(ex, out response)
                : HttpStatusCode.InternalServerError;
            context.Response = context.Request.CreateResponse(statusCode, response ?? ex);
        }

        base.OnException(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

此过滤器将所有异常作为json-objects返回,并允许某些IMyExceptionHandler实现自定义要返回的对象.

这一切都运作良好.直到我的一些消息处理程序中有一个例外:

public class FooMessageHandler : DelegatingHandler
{
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

13
推荐指数
3
解决办法
2万
查看次数

哪个http头的类型在ASP.NET 5中消失了?

以前,在WebApi(在.NET 4.x上),我们可以通过类型化接口处理请求和响应的头文件(请参阅HttpRequestMessage.Headers/ HttpResponseMessage.Headers).现在,在ASP.NET 5,我们有HttpRequestHttpResponse同类型的标题属性IHeaderDictionary.但它只是一个无类字典.

下面我给一个带有类型访问的例子可以返回一个微调的http响应.需要创建HttpResponseMessage并填充其Headers集合(键入btw).

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(manifestContent);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/cache-manifest");
response.Headers.CacheControl = new CacheControlHeaderValue {NoCache = true, Public = true};
response.Headers.ETag = new EntityTagHeaderValue("\"" + etag + "\"");
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core

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

MSTest和AppDomains

在我的一些项目中,我注意到在VSTS2008下执行单元测试期间,其VSTestHost的内存消耗增长.因为我在我的解决方案中有很多测试,所以最终会导致OutOfMemroyException.这对我来说非常奇怪,因为我确信MSTest为每个单元测试创​​建了一个新的AppDomain.否则它将如何重置静态字段?但是如果为每个测试创建AppDomain,那么内存不应该泄漏.但确实如此.

所以问题是:VS应该为每个测试类创建AppDomain吗?如果是,我怎么检查它是否成功.我试过跟踪ProcessExpolorer和Performance管理单元.在测试运行期间,"Total appdomain unloaded"的值始终为0.

unit-testing mstest visual-studio

12
推荐指数
3
解决办法
7049
查看次数

是否可以在.NET中调用堆栈中的每个帧获取参数值

我在谈论托管的.NET代码.如果我们运行任何程序并将VS附加到它,我们可以看到调用堆栈中每个方法的参数值.我想创建一个日志记录解决方案,它将记录调用堆栈中每个方法的所有参数值.实际上我需要这个信息,以防发生异常.

我知道可以通过分析API来实现.但我想知道只有托管代码才有可能吗?

更新:好的,可能使用纯.NET,这是不可能的.然后可能有某种非托管代码......重点是从应用程序本身内部执行此操作.在异常的情况下,应用程序可以调用某个库(可能是非托管的),它返回有关调用堆栈中方法值的信息.只是想一想......

.net clr diagnostics

11
推荐指数
1
解决办法
2348
查看次数