GVKun编程网logo

Windows服务不能在冷启动时启动(win10服务不能启动)

14

在这篇文章中,我们将带领您了解Windows服务不能在冷启动时启动的全貌,包括win10服务不能启动的相关情况。同时,我们还将为您介绍有关Android:启动时启动服务,但不启动GUI、c#–WinR

在这篇文章中,我们将带领您了解Windows服务不能在冷启动时启动的全貌,包括win10服务不能启动的相关情况。同时,我们还将为您介绍有关Android:启动时启动服务,但不启动GUI、c# – WinRT – 在Windows启动时启动一个应用程序?、c# – 从Windows服务启动Windows应用程序、c# – 如何在Windows服务启动时运行任务?的知识,以帮助您更好地理解这个主题。

本文目录一览:

Windows服务不能在冷启动时启动(win10服务不能启动)

Windows服务不能在冷启动时启动(win10服务不能启动)

Windows并不总是在冷启动的时候开始我的服务,大部分时间都是这样,但是每次都不能以系统日志中的“超时达到”错误开始。

我添加了一行来转储服务开始的时间,看看发生了什么。

大约15次关机并重新启动后,我的服务终于没有启动。

查看应用程序事件日志,我在8:18:29看到Windows许可证validation事件,WMI从8:19:04开始,但是当我查看日志文件时,我看到'08:15:21:_tmain'

DotNetZip – 如何提取到工作目录

如何在C#中的系统中获取访问的网站URL

从try语句(C#)中更改对象属性

.Net 3.5 Windows窗体应用程序:64位Vista上的x86与x64加载时间

.NET 3.5安全问题

这意味着我的服务甚至没有加载这个重新启动,或者至less'主'没有被调用。

查看系统事件日志:我在8:18:57看到事件7009:在等待XXXX服务连接时达到超时(30000毫秒)。

在registry'HKLM System CurrentControlSet Control'我有值'ServicesPipeTimeout'设置为90000

我的服务可执行文件是基于.Net 2.0的C ++和/ clr支持,可执行文件也没有被签名,我添加了

<generatePublisherEvidence enabled="false"/>

到.config文件,只是为了确保。

该服务是依赖于事件日志,这显然是工作。

这是Windows 7的x64虚拟机与4GB的内存和其他一点点,但似乎在启动时出现颠簸,并无法获得networking连接。

如果我手动启动服务,它将在5秒内启动。

我不想让自动(延迟启动)服务,因为这发生在Windows启动后2分钟。

我不知道下一步该怎么做,甚至在哪里寻找。

任何指导将不胜感激。

谢谢。

[编辑]这是我的代码的条目。 请注意,在写入日志之前,我对服务进行了任何操作,这些操作都在MyService类中。

int _tmain(int /*argc*/,TCHAR* /*argv*/[],TCHAR* /*envP*/[]) { SaveStringToFile(L"C:\start.txt",CTime::GetCurrentTime().Format("%H:%M:%s") + L": _tmainn"); SetUnhandledExceptionFilter( MyCustomFilter ); OutputDebugString(_T(__FUNCTION__)); CMyService Service;

为什么没有Microsoft.Win64命名空间?

在C#中使用特定服务的cpu使用情况

如何最大限度地减lessWindows内存使用量

log4net xmlconfigurator.configure需要使用dllembedded的xml文件

ShowDialog返回types:窗体与窗口

在启动过程中可能会出现竞争状况。 如果在系统尝试启动服务之前事件日志尚未开始工作,并且该日志存在依赖关系,则可能导致服务失败。

也许你可以改变你的服务应用程序相对于日志的启动顺序

编辑添加评论信息

根据我的经验,如果在初始化过程中执行了太多的操作,就会出现一个真正的危险,即不能启动服务可执行文件 我只写了要领。在这种情况下,写一个日志:(还包括main和ServiceMain()的片段来说明我前面提到的异常日志记录…)

//////////////////////////////////////////////////////// // // InitService(void) - Service initialization // // Caution - limit what is done from this function. // The service start function: SVC_ServiceStart() // is limited in how much time can be allocated // to start this executable before it times out. // //////////////////////////////////////////////////////// int InitService(void) { char buf[200]; sprintf(buf,"Monitoring started"); if(LOG_STRTSTOP==1)WritetoLog(buf); return SVC_SUCCESS; }

我的main()和ServiceMain()如下所示:

void main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = "xyzMon"; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; // Start the control dispatcher thread for our service StartServiceCtrldispatcher(ServiceTable); LogProgramFlow("Leaving main()"); } void ServiceMain(int argc,char** argv) { int error,result; pS = &s; ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 3000; hStatus = RegisterServiceCtrlHandler( "xyzMon",(LPHANDLER_FUNCTION)ControlHandler); if (hStatus == (SERVICE_STATUS_HANDLE)0) { // Registering Control Handler Failed if(LOG_ERR==1) WritetoLog("Registering Control Handler Failed"); return; } // Initialize Service error = InitService(); ....

Android:启动时启动服务,但不启动GUI

Android:启动时启动服务,但不启动GUI

我正在编写一个 Android应用程序,它有两个主要组件:一个在启动时启动的服务,以及一个我只想在我通过其图标手动启动它时启动的GUI,而不是在设备启动时启动.我知道如何在启动时启动服务,但它也会在启动时启动GUI,这是我不想要的.

我认为这与我的清单中的设置有关,但尽管尝试了很多事情,我还没想出如何防止GUI也在启动时启动.

我应该补充一点,我没有在启动时以编程方式启动GUI.我在GUI的活动类中引用了静态公共变量,但我没有进行任何方法调用或向GUI的活动发送任何意图.

这是我的清单.我究竟做错了什么?非常感谢你.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="my.package.name"
      android:versionCode="0"
      android:versionName="0.1.0">

    <uses-sdk
        android:minSdkVersion="11" 
        android:targetSdkVersion="17"/>

    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application android:icon="@drawable/icon"
                 android:label="@string/app_name"
                 android:allowBackup="true" >

        <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
               I want MainActivity to only start when I
               select its icon,NOT at boot time. However,it always starts up at boot.
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        -->
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:launchMode="singletop">
           <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>

        <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
               MyBootReceiver properly starts up at boot time,and it properly invokes MyBootService. At
               the appropriate time,MyBootService invokes
               Registeractivity. 
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        -->
        <activity android:name=".Registeractivity"
                  android:label="@string/app_name">
        </activity>
        <receiver
            android:name=".MyBootReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="my.package.name" />
            </intent-filter>
        </receiver>
        <service android:name=".MyBootService" />

    </application>
</manifest>

添加广播接收器类:

package my.package.name;

import android.content.broadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBootReceiver extends broadcastReceiver {

    @Override
    public void onReceive(Context context,Intent intent) {
        Intent bootIntent = new Intent(context,MyBootService.class);
        bootIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startService(bootIntent);
    }
}

添加服务类……

package my.package.name;

import java.util.ArrayList;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.TelephonyManager;

public class MyBootService extends Service {

    private static final String GOOGLE_ACCOUNT_TYPE    = "com.google";
    private static final String GOOGLE_ACCOUNT_FEATURE = "service_ah";

    private Context context = null;

    @Override
    public IBinder onBind(Intent intent) {
        this.display("onBind");
        return (null);
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onStart(Intent intent,int startId) {
        super.onStart(intent,startId);
    }

    @Override
    public int onStartCommand(Intent intent,int flags,int startId) {
        super.onStartCommand(intent,flags,startId);

        AccountManager am = AccountManager.get(this);
        am.getAccountsByTypeAndFeatures(GOOGLE_ACCOUNT_TYPE,new String[]{GOOGLE_ACCOUNT_FEATURE},new AccountManagerCallback<Account[]>() {
                    @Override
                    public void run(AccountManagerFuture<Account[]> acclist) {
                        MyBootService parent = MyBootService.this;
                        Intent regIntent = new Intent(parent.getApplicationContext(),Registeractivity.class);
                        try {
                            ArrayList<String> accountNameList = new ArrayList<String>();
                            for (Account a: acclist.getResult()) {
                                accountNameList.add(a.name);
                            }
                            regIntent.putStringArrayListExtra("accountNames",accountNameList);
                            try {
                                TelephonyManager tmgr = (TelephonyManager) parent.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
                                String phoneNo = tmgr.getLine1Number();
                                regIntent.putExtra("phoneNumber",phoneNo);
                            }
                            catch (Throwable t) {
                            }
                        }
                        catch (Throwable t) {
                            // put error message here
                        }
                        regIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        parent.startActivity(regIntent);
                    } 
                },null);

        return (START_STICKY);
    }

    @Override
    public void onDestroy() {
        this.display("onDestroy");
        super.onDestroy();
    }
}

更多信息

我想出了一些正在发生的事情.首先,我错误地说我的MainActivity正在开始.经过更详细的调试,我发现它的onCreate()和onResume()方法没有被调用.但是,应用程序的视图显示:黑屏,显示应用程序名称和默认图标.我最初误以为这是一个完整启动的迹象.

当然,这首先提出了为什么这个视图出现在启动时的问题.我有一些关于这个的信息,虽然我仍然对发生了什么感到困惑.我删除了由MyBootService调用的Registeractivity类的onCreate()方法.调用this.getIntent()时,应用程序的视图会在启动时显示.注释掉this.getIntent()时,应用程序的视图不会在启动时显示.

请注意,这是Registeractivity类的onCreate(),而不是MainActivity.

当你调用this.getIntent()时,你们是否知道可能导致应用程序视图出现的原因?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // If the following line is commented out,the
    // application's view does not show up on boot;
    // if the following line is not commented out,// the application's view shows up.

    Intent intent = this.getIntent();
}

解决方法

我认为您所看到的是Android使用的预览,使应用启动似乎更快.此预览基于您的活动主题.

尝试为Registeractivity设置自定义主题,这更接近于最终结果.例如,如果您的活动是对话框,请创建一个扩展Theme.Dialog或Theme.Light.Dialog的主题

您可以从Cyril Mottier:Android App Launching Made Gorgeous获取此博客文章的更多信息

编辑:改为实际回答问题

c# – WinRT – 在Windows启动时启动一个应用程序?

c# – WinRT – 在Windows启动时启动一个应用程序?

我正在为 Windows 8的新的WinRT(.NET 4.5)框架中的Metro风格应用程序工作,我想知道是否可能以某种方式为应用程序(通过注册表或其他方式)注册自己才能启动Windows启动时也是如此.

我无法找到任何其他地方,只有Windows 7或更低版​​本,与普通样式的应用程序.

解决方法

在启动时无法启动Metro风格的应用程序.用户必须从起始画面调用应用程序. Metro风格的应用程序无法进行服务,因此在启动时启动它们似乎不是正确的方法,而不是在启动时启动Microsoft Word或Adobe Photoshop.

c# – 从Windows服务启动Windows应用程序

c# – 从Windows服务启动Windows应用程序

我正在尝试使用以下代码从 windows服务启动 Windows应用程序
Process.Start(@"filename.exe");

在Windows 7中,我收到一个弹出窗口,说:“这台计算机上运行的程序正在尝试显示一条消息”

解决方法

看看下面的链接:

http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx

c# – 如何在Windows服务启动时运行任务?

c# – 如何在Windows服务启动时运行任务?

我有一个 Windows服务,我已经编写了代码来在OnStart()事件中运行任务:
protected override void OnStart(string[] args)
        {
            this.DoTask();
        }

private void DoTask()
        {
            Task task1 = Task.Factory.StartNew(() => this.OriginalFileProcessor.StartPolling());

            try
            {
                Task.Wait(task1);
            }
            catch (Exception ex)
            {
                this.Log.Error("Failed running the task",ex);
            }           
        }

DoTask是一个永无止境的循环.它仅在服务停止时停止.

但是当我尝试启动服务时,它会等待很长时间然后给我以下错误:

Windows Could not start the ... service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.

怎么解决?

解决方法

你为什么要等完你的任务?

我认为Task.Wait阻止了你当前的线程,然后你在启动服务时遇到了超时.

编辑:您需要删除此块:

try
{
    Task.Wait(task1);
}
catch (Exception ex)
{
    this.Log.Error("Failed running the task",ex);
}

Task.Wait确实阻止了你当前的线程.根据MSDN:

Task.Wait Method

Waits for the Task to complete execution.

编辑2改为执行此操作

Task task1 = Task.Factory.StartNew(() => this.OriginalFileProcessor.StartPolling()).ContinueWith( t =>
{
     var aggException = t.Exception.Flatten();
     foreach(var ex in aggException.InnerExceptions)
         this.Log.Error("Failed running the task",ex);
},TaskContinuationoptions.OnlyOnFaulted);

关于Windows服务不能在冷启动时启动win10服务不能启动的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android:启动时启动服务,但不启动GUI、c# – WinRT – 在Windows启动时启动一个应用程序?、c# – 从Windows服务启动Windows应用程序、c# – 如何在Windows服务启动时运行任务?的相关知识,请在本站寻找。

本文标签: