GVKun编程网logo

如何将Windows服务从本地PC移动到虚拟专用服务器上(服务器怎么迁移到虚拟机上)

9

针对如何将Windows服务从本地PC移动到虚拟专用服务器上和服务器怎么迁移到虚拟机上这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#–从本地服务器到服务器的Windows身份验证,但不

针对如何将Windows服务从本地PC移动到虚拟专用服务器上服务器怎么迁移到虚拟机上这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器、Java调度程序执行器在虚拟的Windows服务器上的计时问题、linux – 专用服务器上的虚拟化?、linux – 是否有可能拥有100%安全的虚拟专用服务器?等相关知识,希望可以帮助到你。

本文目录一览:

如何将Windows服务从本地PC移动到虚拟专用服务器上(服务器怎么迁移到虚拟机上)

如何将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身份验证,但不是服务器到服务器

c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器

我有两个站点,A和B.A使用B公开的API,B需要 Windows身份验证.两个站点都位于域D.

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问题?

解决方法

虽然我还没确定为什么这个工作有效,或者有更好的方法(因为这感觉很笨)),当两者都坐在同一台服务器上时,以下允许A连接到B.

站点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调度程序执行器在虚拟的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/描述了与不同虚拟机管理程序相似的问题&#x3002; 有趣的是,Hyper-V在那里没有提到,但是这个问题在特定的设置中看起来不是唯一的。 Microsoft在Windows 2008 R2上运行的Hyper-V提供了有关定时器正确性的问题 。 上帝知道不同云提供商在云中运行的是什么。 我个人能够在AWS云上重现这个问题。

所以“这个效果是什么”的答案是 – 它是与Java实现“功能”相结合的虚拟机管理程序错误。 可以肯定的是,您可以尝试使用OpenJDK运行此测试,您可以在其中看到代码并使用不同的定时器源进行播放。

但出于实际的原因,我建议避免在Windows VM上运行计时器敏感的Java代码。 如果这是非常困难的要求,我会尝试使用Win32定时器,并从那里调用JVM代码(使用JNI)或实现任何其他计时器源(使用命名管道或任何其他平台特定的修补程序)。 你可以尝试使用Quartz作为定时器和调度器,但是它也可能遭受同样的问题。

linux – 专用服务器上的虚拟化?

linux – 专用服务器上的虚拟化?

我即将购买专用服务器,我想知道为以下架构设置虚拟化(如XenServer)是否值得.

>我的公司网站上使用Apache / PHP / MysqL的Linux,
> Linux下的测试/开发环境,使用Java / Tomcat / Continuous Integration工具/ Bugs跟踪工具/ SVN供我的开发人员使用,
> Linux下的生产环境,为我的客户提供Java / Tomcat.

从长远来看,我认为这对我有所帮助,包括备份,安全等等.你怎么看?

解决方法

我会全力以赴.考虑使用快照的所有好处,当然还有在同一硬件上运行多个系统. 我已经为我的环境运行了几年ESXi,它确实很有效,即使是小型的.正如我所说,快照功能真棒:)

linux – 是否有可能拥有100%安全的虚拟专用服务器?

linux – 是否有可能拥有100%安全的虚拟专用服务器?

我很好奇是否可能有一个VPS,其上有数据,主机提供商无法读取,但仍可在VPS上使用.

显然,你可以采取一些措施来阻止他们阅读任何东西……

>您可以更改所有密码,包括root.但是,他们仍然可以使用一些备用启动来重置密码,或者他们可以以另一种方式安装磁盘.
>因此,您可以加密磁盘或磁盘上的至少一些内容.但是,似乎如果你解密内容,他们仍然可以“同行”看你在控制台上做了什么,因为毕竟虚拟化平台应该允许这样做.
>即使你能阻止它,它们似乎也可以直接读取VPS的RAM.

当然,VPS可以在其上存储数据,只要密钥不在VPS上并且数据永远不会被解密,那么主机就无法获取数据.

但在我看来,如果任何一点,VPS上的数据被解密……在VPS上使用……那么托管服务提供商就可以获得数据.

所以,我的两个问题是:

>这是对的吗?是否真的没有办法让主机上的VPS数据100%安全地看到它,同时保持VPS可以访问它?
>如果有可能使其100%安全,那么如何?如果不可能,那么从Web主机隐藏数据的最接近的是什么?

解决方法

虚拟机主机可以查看和取消您提到的任何安全措施,包括虚拟磁盘或虚拟文件系统中的文件的加密.这样做可能并不简单,但它比大多数人想象的要容易得多.实际上,你提到了做到这一点的常用方法.

在商业世界中,这通常通过合同和服务水平协议来处理,规定遵守法律和行业标准,因此只要主机实际上符合相关标准,通常就认为是非问题.

如果您的使用案例要求主持人提供安全保障,或者更有可能来自主办方政府,那么您应该强烈考虑在其他国家/地区获取服务.

关于如何将Windows服务从本地PC移动到虚拟专用服务器上服务器怎么迁移到虚拟机上的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – 从本地服务器到服务器的Windows身份验证,但不是服务器到服务器、Java调度程序执行器在虚拟的Windows服务器上的计时问题、linux – 专用服务器上的虚拟化?、linux – 是否有可能拥有100%安全的虚拟专用服务器?的相关知识,请在本站寻找。

本文标签: