0

所以我想要完成的是总是开始。本机操作系统版本中的 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 应用程序中

4

1 回答 1

0

Answer over there

Option Infer On

Option Strict On

Imports System.IO Module Module1 Sub Main() Dim f As String = "" If IntPtr.Size = 4 Then f = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative") MsgBox("Running on X86") Else f = Environment.GetFolderPath(Environment.SpecialFolder.System) MsgBox("Running on X64") End If 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

于 2013-04-19T18:46:36.633 回答