在这篇文章中,我们将带领您了解Windows服务不能在冷启动时启动的全貌,包括win10服务不能启动的相关情况。同时,我们还将为您介绍有关Android:启动时启动服务,但不启动GUI、c#–WinR
在这篇文章中,我们将带领您了解Windows服务不能在冷启动时启动的全貌,包括win10服务不能启动的相关情况。同时,我们还将为您介绍有关Android:启动时启动服务,但不启动GUI、c# – WinRT – 在Windows启动时启动一个应用程序?、c# – 从Windows服务启动Windows应用程序、c# – 如何在Windows服务启动时运行任务?的知识,以帮助您更好地理解这个主题。
本文目录一览:- Windows服务不能在冷启动时启动(win10服务不能启动)
- Android:启动时启动服务,但不启动GUI
- c# – WinRT – 在Windows启动时启动一个应用程序?
- c# – 从Windows服务启动Windows应用程序
- c# – 如何在Windows服务启动时运行任务?
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
我认为这与我的清单中的设置有关,但尽管尝试了很多事情,我还没想出如何防止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(); }
解决方法
尝试为Registeractivity设置自定义主题,这更接近于最终结果.例如,如果您的活动是对话框,请创建一个扩展Theme.Dialog或Theme.Light.Dialog的主题
您可以从Cyril Mottier:Android App Launching Made Gorgeous获取此博客文章的更多信息
编辑:改为实际回答问题
c# – WinRT – 在Windows启动时启动一个应用程序?
我无法找到任何其他地方,只有Windows 7或更低版本,与普通样式的应用程序.
解决方法
c# – 从Windows服务启动Windows应用程序
Process.Start(@"filename.exe");
在Windows 7中,我收到一个弹出窗口,说:“这台计算机上运行的程序正在尝试显示一条消息”
解决方法
http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx
c# – 如何在Windows服务启动时运行任务?
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服务启动时运行任务?的相关知识,请在本站寻找。
本文标签: