针对如何将Windows服务从本地PC移动到虚拟专用服务器上和服务器怎么迁移到虚拟机上这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#–从本地服务器到服务器的Windows身份验证,但不
针对如何将Windows服务从本地PC移动到虚拟专用服务器上和服务器怎么迁移到虚拟机上这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器、Java调度程序执行器在虚拟的Windows服务器上的计时问题、linux – 专用服务器上的虚拟化?、linux – 是否有可能拥有100%安全的虚拟专用服务器?等相关知识,希望可以帮助到你。
本文目录一览:- 如何将Windows服务从本地PC移动到虚拟专用服务器上(服务器怎么迁移到虚拟机上)
- c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器
- Java调度程序执行器在虚拟的Windows服务器上的计时问题
- linux – 专用服务器上的虚拟化?
- linux – 是否有可能拥有100%安全的虚拟专用服务器?
如何将Windows服务从本地PC移动到虚拟专用服务器上(服务器怎么迁移到虚拟机上)
我已经创build了窗口服务来执行一些function。
现在我想将其安装在我的专用虚拟服务器上。
我可以通过远程桌面连接到服务器,但是我无法像在本地PC上那样安装Windows服务。
如何将Windows服务从我的PC移动到虚拟专用服务器并在那里安装?
C#:结合DllImport与inheritance?
将安装Visual Studio 2010 +奥斯陆CTP螺丝我的Visual Studio 08安装?
以编程方式创buildWindows用户c#.net(使用PricinpalUser / CreateProfile)
为什么不同的计算机或操作系统上的文化date格式不同?
卸载框架4.6.2预览
将string转换为浮点并格式化(C#)
单声道WCF InstanceContextMode不工作
Windows XP中的.NET Framework 2.0是否可选?
Winforms Webbrowser告诉什么时候完成刷新
帮助一个超出范围的函数(C#)
从以前的评论转换:
您必须将包含该服务的文件复制到虚拟PC,然后将其安装在那里。 您复制文件的方式与在计算机之间复制任何内容(通过网络或类似方式)
在Visual Studio 2010中创建一个新的Windows服务项目。
然后在该项目中创建一个Service Installer。 部署后将创建脚本。
http://msdn.microsoft.com/en-us/library/ddhy0byf.aspx
项目安装程序的可执行文件可以像这里所说的那样运行
http://msdn.microsoft.com/en-us/library/sd8zc8ha.aspx
如果您不使用Visual Studio,则可以使用PowerShell来远程安装Windows服务。
示例链接: http : //halr9000.com/article/444
# Creates a service using the Create Method of Win32_Service Class # MSDN docs: http://msdn2.microsoft.com/en-us/library/aa389390.aspx # Helpful example obtained from The PowerShell Guy # http://thepowershellguy.com/blogs/posh/archive/2007/03/26/powershell-wmi-explorer-part-3.aspx $computer = "." # this computer $$method = "Create" $mc = [wmiclass]"\$computerROOTCIMV2:$class" $inparams = $mc.PSBase.getmethodParameters($method) $inparams.DesktopInteract = $false $inparams.displayName = "My Service" $inparams.ErrorControl = 0 $inparams.LoadOrderGroup = $null $inparams.LoadOrderGroupDependencies = $null $inparams.Name = "myservice" $inparams.PathName = "c:program filespathmyservice.exe" $inparams.ServiceDependencies = $null $inparams.ServiceType = 16 $inparams.StartMode = "Automatic" $inparams.StartName = $null # will start as localsystem builtin if null $inparams.StartPassword = $null
c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器
API通过HttpClient使用,当站点A在本地运行时,在我的域帐户(在域P中)下,授予访问权限.在这种情况下,HttpClient实例化如下:
using(var client = new HttpClient(new httpclienthandler { UseDefaultCredentials: true }))
当A部署到测试服务器时,上面会导致401 Unauthorized响应.测试服务器上的应用程序池在域D中的服务帐户下运行.
明确使用该服务帐户时,如下所示:
var credential = new NetworkCredential("service-account","password","D"); var cache = new CredentialCache { { new Uri(apiServerUri),"NTLM",credential } }; var handler = new httpclienthandler { Credentials = cache }; using(var client = new HttpClient(handler)) ...
再次在本地运行站点A,仍然可以访问.通过浏览器直接访问API并指定服务帐户凭据时,也会授予访问权限.日志表明它绝对是用于访问API的服务帐户.
将上述部署回测试服务器仍然会导致401 Unauthorized.
将站点A部署到IIS的本地实例,也成功使用了B的API.
在本地运行站点B,然后在本地通过站点A访问它,导致401 Unauthorized.
通过部署A的测试服务器上的浏览器访问API,并指定服务帐户凭据,也会提供401 Unauthorized.
我不确定从哪里开始 – 我在代码中遗漏了一些东西以使其正常工作吗?或者它可能是IIS或AD问题?
解决方法
站点B在IIS中有一个额外的主机绑定设置,以侦听localhost:12345.站点A已配置为连接到该端点,而不是站点B的域名.身份验证现在可以正常工作.
如果有人能解释为什么会这样,我会感兴趣 – 我不喜欢’魔术’修复.
编辑
似乎this kb article可能是导致此行为的原因.特别:
When you use the fully qualified domain name (FQDN) or a custom host
header to browse a local Web site that is hosted on a computer that is
running Microsoft Internet information Services (IIS) 5.1 or a later
version,you may receive an error message that resembles the
following: HTTP 401.1 – Unauthorized: logon Failed This issue occurs
when the Web site uses Integrated Authentication and has a name that
is mapped to the local loopback address
和
Therefore,authentication fails if the FQDN or the custom host header that you use does not match the local computer name.
注册表修改在这些服务器上实际上不是一个选项,因此看起来我们将使用的是解决方法.
Java调度程序执行器在虚拟的Windows服务器上的计时问题
我们有一个Java应用程序需要在其他环境中运行在虚拟(Hyper-V)Windows 2012 R2服务器上。 当在这个虚拟的Windows服务器上执行时,它似乎遇到奇怪的计时问题。 我们已经将这个问题追溯到Java调度执行器中的不稳定调度:
public static class TimeRunnable implements Runnable { private long lastRunAt; @Override public void run() { long Now = System.nanoTime(); System.out.println(TimeUnit.NANOSECONDS.toMillis(Now - lastRunAt)); lastRunAt = Now; } } public static void main(String[] args) { scheduledexecutorservice exec = Executors.newScheduledThreadPool(1); exec.scheduleAtFixedrate(new TimeRunnable(),10,TimeUnit.MILLISECONDS); }
这个代码应该每10ms运行一次TimeRunnable,在服务器上产生这样的结果:
12 15 2 12 15 0 14 16 2 12 140 0 0 0 0 0 0 0 0 0 0 0 0 1 0 7 15 0 14 16 2 12 15 2 12 1 123 0 0 0
而在其他机器上,包括重负载的虚拟Linux机器,以及一些Windows桌面,一个典型的运行如下所示:
9 9 10 9 10 9 10 10 9 10 9 9 10 10 9 9 9 9 10 10 9 9 10 10 9 9 10 9 10 10 10 11 8 9 10 9 10 9 10 10 9 9 9 10 9 9 10 10 10 9 10
我们没有很多Windows Server和Hyper-V的经验,所以任何人都可以提供这种现象的解释吗? 这是一个Windows Server的问题? Hyper-V的? 这些平台上的Java错误? 有解决scheme吗?
Windows 10的新Netnat得到了Windows系统错误31
在Hyper-V虚拟机上完成Windows应用程序开发
如何检查是否使用PowerShell启用了Hyper-V?
带有Windows 8 Pro的Hyper-V RemoteFX?
在Hyper-V vm(Windows 10 Pro)上启用VT对intel haxm的支持?
编辑:一位同事写了同一个程序的C#版本:
private static Stopwatch stopwatch = new Stopwatch(); public static void Main() { stopwatch.Start(); Timer timer = new Timer(callback,null,TimeSpan.FromMilliseconds(10),TimeSpan.FromMilliseconds(10)); } private static void callback(object state) { stopwatch.Stop(); TimeSpan span = stopwatch.Elapsed; Console.WriteLine((int)span.TotalMilliseconds); stopwatch.Restart(); }
下面是在虚拟Windows服务器上并行工作的两个应用程序的更新(部分)截图:
编辑:Java程序的几个其他变体都产生(几乎)相同的输出:
System.nanoTime()被System.currentTimeMillis()replace的变体
System.out.println()被定期打印的StringBuilderreplace的变体
调度机制被一个通过Thread.sleep()自行定时的单个线程replace的变体
lastRunAt是volatile的变体
无法更改虚拟机的内存:错误代码32775
Docker for windows:创build机器时出错
networking共享被拒绝权限
Docker卡在“等待SSH可用…”
Windows 8.1 Professional Hyper-V无法启动
我也不知道为什么会发生。 但是,这不太可能是Java的错。 Java使用本地线程,这意味着线程调度由“操作系统”处理。
我认为这里真正的问题是,你已经建立了一个基于错误前提的应用程序。 如果您阅读Java文档(对于正常/非实时JVM),您将找不到任何说Java线程调度是准确的。 即使调度的优先事项是“尽最大努力”。
事实上,你已经观察到在一个负载很重的Linux虚拟机上进行调度是相当准确的,这一点很有趣……但不一定具有启发性。 调度精度将取决于系统负载的性质 。 而且很可能是平台中内存,Vcpu和I / O带宽的“过度使用”。
有解决方案吗?
也许你可以想出一个办法,让你的平台上的日程安排更“准确”(在一个美好的一天,随风而行)。 但是,除非您切换到实时操作系统和实时Java版本,否则无法保证准确性。 你不会找到任何一个虚拟化平台的实时Java实现。 所以真正的解决办法是避免依靠准确的调度。
这是由System.currentTimeMillis()粒度造成的。 注意那里的评论:
请注意,虽然返回值的时间单位是毫秒,但是值的粒度取决于底层操作系统,可能会更大。
我在一台机器上记录了大约15毫秒的粒度。 这可以解释你所看到的所有0值,但不是大值。
运行测试的增强版本:
static final TreeMap<Long,AtomicInteger> counts = new TreeMap<>(); public static final AtomicInteger inc(AtomicInteger i) { i.incrementAndGet(); return i; } public static class TimeRunnable implements Runnable { private long lastRunAt; @Override public void run() { long Now = System.nanoTime(); long took = TimeUnit.NANOSECONDS.toMillis(Now - lastRunAt); counts.compute(took,(k,v) -> (v == null) ? new AtomicInteger(1) : inc(v)); //System.out.println(TimeUnit.NANOSECONDS.toMillis(Now - lastRunAt)); lastRunAt = Now; } } public void test() throws InterruptedException { System.out.println("Hello"); scheduledexecutorservice exec = Executors.newScheduledThreadPool(1); exec.scheduleAtFixedrate(new TimeRunnable(),TimeUnit.MILLISECONDS); // Wait a bit. Thread.sleep(10000); // Shut down. exec.shutdown(); while (!exec.awaitTermination(60,TimeUnit.SECONDS)) { System.out.println("Waiting"); } System.out.println("counts - " + counts); }
我得到的输出:
counts - {0=361,2=1,8=2,13=2,14=18,15=585,16=25,17=1,18=1,22=1,27=1,62=1,9295535=1}
巨大的离群值是第一次打 – 当lastRunAt是零。 0=361是你在10ms之后被调用,但是System.currentTimeMillis()还没有踢过它的一个tick。 请注意,在15=585的峰值显示了15ms的清晰峰值,正如我所建议的那样。
我对62=1没有任何解释。
我认为你需要增加Java应用程序进程和工作线程在Java应用程序中的优先级。 它易于增加java应用程序内部工作线程的优先级。 但是要设置java应用程序来获得比你所获得的更高的cpu是非常棘手的。 可能这可能有助于获得更高的cpu为您的程序
如何改变正在运行的java进程的优先级?
https://blogs.msdn.microsoft.com/oldnewthing/20100610-00/?p=13753
你也可以看看实时cpu,但请注意它可以延迟其他内核活动,包括鼠标和键盘事件
这个延迟肯定是由于任务不能在指定的时间开始,因此下一个任务在周期时间之前被触发来调整固定的速率,如下所述: Java Timer
现代硬件大多提供多个定时器源。 另外,大多数操作系统提供了几个API来以不同的精度访问这些定时器计数器(例如系统定时器和RTC)。 了解Microsoft,.NET平台(以及大多数MS产品)利用了对Win32 API和内核API的深入了解。 我的直觉说,C#中的Timer类使用与Java不同的API( 这里描述的Hotspot VM实现,尽管它对于Java 5是正确的)。
在虚拟环境中有定时器精度的一般问题。 我发现非常有趣的测试结果http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4503740/描述了与不同虚拟机管理程序相似的问题。 有趣的是,Hyper-V在那里没有提到,但是这个问题在特定的设置中看起来不是唯一的。 Microsoft在Windows 2008 R2上运行的Hyper-V提供了有关定时器正确性的问题 。 上帝知道不同云提供商在云中运行的是什么。 我个人能够在AWS云上重现这个问题。
所以“这个效果是什么”的答案是 – 它是与Java实现“功能”相结合的虚拟机管理程序错误。 可以肯定的是,您可以尝试使用OpenJDK运行此测试,您可以在其中看到代码并使用不同的定时器源进行播放。
但出于实际的原因,我建议避免在Windows VM上运行计时器敏感的Java代码。 如果这是非常困难的要求,我会尝试使用Win32定时器,并从那里调用JVM代码(使用JNI)或实现任何其他计时器源(使用命名管道或任何其他平台特定的修补程序)。 你可以尝试使用Quartz作为定时器和调度器,但是它也可能遭受同样的问题。
linux – 专用服务器上的虚拟化?
>我的公司网站上使用Apache / PHP / MysqL的Linux,
> Linux下的测试/开发环境,使用Java / Tomcat / Continuous Integration工具/ Bugs跟踪工具/ SVN供我的开发人员使用,
> Linux下的生产环境,为我的客户提供Java / Tomcat.
从长远来看,我认为这对我有所帮助,包括备份,安全等等.你怎么看?
解决方法
linux – 是否有可能拥有100%安全的虚拟专用服务器?
显然,你可以采取一些措施来阻止他们阅读任何东西……
>您可以更改所有密码,包括root.但是,他们仍然可以使用一些备用启动来重置密码,或者他们可以以另一种方式安装磁盘.
>因此,您可以加密磁盘或磁盘上的至少一些内容.但是,似乎如果你解密内容,他们仍然可以“同行”看你在控制台上做了什么,因为毕竟虚拟化平台应该允许这样做.
>即使你能阻止它,它们似乎也可以直接读取VPS的RAM.
当然,VPS可以在其上存储数据,只要密钥不在VPS上并且数据永远不会被解密,那么主机就无法获取数据.
但在我看来,如果任何一点,VPS上的数据被解密……在VPS上使用……那么托管服务提供商就可以获得数据.
所以,我的两个问题是:
>这是对的吗?是否真的没有办法让主机上的VPS数据100%安全地看到它,同时保持VPS可以访问它?
>如果有可能使其100%安全,那么如何?如果不可能,那么从Web主机隐藏数据的最接近的是什么?
解决方法
在商业世界中,这通常通过合同和服务水平协议来处理,规定遵守法律和行业标准,因此只要主机实际上符合相关标准,通常就认为是非问题.
如果您的使用案例要求主持人提供安全保障,或者更有可能来自主办方政府,那么您应该强烈考虑在其他国家/地区获取服务.
关于如何将Windows服务从本地PC移动到虚拟专用服务器上和服务器怎么迁移到虚拟机上的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器、Java调度程序执行器在虚拟的Windows服务器上的计时问题、linux – 专用服务器上的虚拟化?、linux – 是否有可能拥有100%安全的虚拟专用服务器?的相关知识,请在本站寻找。
本文标签: