使用32位服务启动64位版本的cscript

时间:2013-04-18 23:40:40

标签: visual-studio service wow64

所以我想要完成的是始终开始。本机操作系统版本中的cscript.exe。因此,当我的脚本运行时,我可以访问正确的系统文件,并且不会被重定向到syswow64 regestry / files。

所以根据msdn文档,我可以在64位系统上运行32位应用程序时使用sysnative来获取真正的system32文件夹。但脚本无法找到cscript.exe文件。所以问题是我做错了什么?我大多是一个蟒蛇人,所以我可能会做出一个愚蠢的假设。

这被编译成32位服务,因此它可以部署在任何Windows操作系统上(理论上)

运行VisualStudio 2010(如果重要)

或者我是否完全回到了前面?

Public Class Service1

Protected Overrides Sub OnStart(ByVal args() As String)
    ' Add code here to start your service. This method should set things
    ' in motion so your service can do its work.
    'Prvents windows from redirecting us to the wow64 folder instead of system32.

    ' Don' run if settings file is gone
    If My.Computer.FileSystem.FileExists("C:\Settings.vbs") Then

        'If we are running in wow64(32bit windows files) mode switch to native 64 bit vbscript
        If My.Computer.FileSystem.DirectoryExists("%systemroot%\sys­native") Then
            Process.Start("%systemroot%\sys­native\cscript.exe", "C:\Main.vbs")
        Else
            Process.Start("%systemroot%\system32\cscript.exe", "C:\Main.vbs")

        End If



    End If
End Sub

Protected Overrides Sub OnStop()
    ' Add code here to perform any tear-down necessary to stop your service.
End Sub

End Class

基本上问题是如何让cscript以64位模式而不是32位运行,所以只有这一行。

Process.Start(“%systemroot%\ system32 \ cscript.exe”,“C:\ Main.vbs”)

在64位系统上运行时,它会更改为C:\ Windows \ SysWOW64。

但是在32位系统上它仍然保持在C:\ Windows \ system32。

我也试过这个:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365744%28v=vs.85%29.aspx

但我无法确定如何使其发挥作用。在vb应用程序中

1 个答案:

答案 0 :(得分:0)

那边的答案

选项推断

Option Strict On

导入System.IO模块Module1 Sub Main()Dim f As String =“”如果IntPtr.Size = 4则f = Path.Combine(Environment.ExpandEnvironmentVariables(“%windir%”),“sysnative”)MsgBox( “在X86上运行”)否则f = Environment.GetFolderPath(Environment.SpecialFolder.System)MsgBox(“在X64上运行”)结束如果Dim wscript As String = Path.Combine(f,“wscript.exe”)Dim psi = New ProcessStartInfo psi.FileName = wscript psi.Arguments = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),“CheckPlatform.vbs”)Dim p As New Process p.StartInfo = psi p.Start()End Sub End Module

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/48bc23b5-798f-4cea-ae33-060a0d66506b