繁体   English   中英

从Windows服务运行外部程序(pscp)不起作用

[英]Running a external program (pscp) from a Windows Service doesn't works

我正在用C ++(Visual Studio 2010)编写Windows服务,并且该服务必须通过安全副本将文件发送到远程服务器(为此,我使用pscp.exe)。

因此,我正在使用system功能来启动pscp.exe,并且在作为普通应用程序运行时都可以正常工作。

但是,如果我尝试作为服务运行,则该服务会启动pscp.exe(我可以在任务管理器上看到它),但是pscp.exe会冻结,并且不会将任何内容发送到远程主机。 即使我停止该服务,我也需要自己杀死pscp进程。

我在一些论坛上阅读以允许该服务“与桌面交互”,但这并不能解决我的问题。

我还尝试更改了该服务登录的用户帐户,但没有结果。

有任何想法吗?

从Windows Service运行外部程序似乎很困难,即使该外部程序没有任何pscp.exe之类的GUI也是如此。

谢谢!

-奥古斯托·卡林吉(Augusto Caringi)

您对pscp调用有哪些选择? 如果有“静音”选项,请使用该选项来避免控制台交互。 通常,这是-q/q

请注意,所有启动的应用程序都将以与您的服务相同的用户帐户运行。 该帐户是否有权执行您要求的操作? 上下文(运行目录,路径)对于pscp执行所需的操作是否正确?

您可以尝试使用模拟。 像这样

    wchar_t* cmPath=readRegistryString(L"Software\\" TO_WCHAR(ORG_NAME) L"\\" TO_WCHAR(APP_NAME) L"\\" TO_WCHAR(APPLICATION_GROUP),TO_WCHAR(APPLICATION_EXEC_PATH));
if (!cmPath)
{
    return false;
}
HANDLE userToken=NULL;
DWORD sessId=WTSGetActiveConsoleSessionId ();
if((long)sessId==-1)
{
    sessId=0;
}
WTSQueryUserToken (sessId, &userToken);
bool result=false;
if(userToken/**/ )
{
    SECURITY_ATTRIBUTES sa;
    ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES));
    sa.nLength=sizeof(SECURITY_ATTRIBUTES);
    STARTUPINFOW si;
    ZeroMemory(&si,sizeof(STARTUPINFOW));
    si.cb=sizeof(STARTUPINFOW);
    PROCESS_INFORMATION pi;
    ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
    CStringW str= L"\"";
    str=str+cmPath;
    str=str+L"\"";
    str.Replace(L"/",L"\\");

    if(CreateProcessAsUserW(userToken,NULL,str.GetBuffer(),NULL,NULL,false,NULL,NULL,NULL,&si,&pi))
    {
            result=true;
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
    }
    else
    {
        DWORD err = GetLastError();
        //nop;
    }
}
if(userToken)
    CloseHandle(userToken);
delete[] cmPath;

我使用这段代码从服务中调用GUI应用程序,但是我认为控制台应用程序不需要太多更改。

您应该使用CreateProcess函数而不是系统启动pscp应用程序。 后者会将您的命令中继到命令解释器(cmd.exe),该命令解释器可能无法从服务访问。

我解决了这个问题!

pscp.exe无法从服务运行。 我不知道为什么

但是curl.exe(来自libcurl)支持并且支持安全复制!

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM