GVKun编程网logo

文件被复制到SysWOW64而不是System32

2

对于文件被复制到SysWOW64而不是System32感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于c#–从System.Runtime.dll而不是从mscorlib获取对System.St

对于文件被复制到SysWOW64而不是System32感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于c# – 从System.Runtime.dll而不是从mscorlib获取对System.String的引用、C:WINDOWSsystem32configsystemprofileDesktop不可用怎么办、go LoadDLL 其依赖项不在 System 或 System32 中、Innosetup 将文件安装到system32 、syswow64下的有用信息。

本文目录一览:

文件被复制到SysWOW64而不是System32

文件被复制到SysWOW64而不是System32

我的应用程序运行时必须将psTool实用程序复制到System32文件夹。

我在64位Windows 7上,每当我尝试通过File.copy将exe复制到system32位文件夹时,exe总是被复制到SysWow64。

当我在destFile上放置一个断点时,path显示为C:WindowsSystem32但文件不会进入(进入sysWow64)。 我已经尝试了Special Folder SystemX86 ,但文件再次进入sysWOW64。

string sourceFile = "C:binDebugsomexe.exe" string destFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),utilityName); File.copy(sourceFile,destFile,true);

任何build议我在这里失踪?

编辑

build立.NET COMInterop项目,而不先注册COM服务

如何显示Windowslogin对话框?

HTTP状态:在.net浏览器控件中的12002

是否有Windows错误报告的.Net API

在Linux上运行ASP Classic和.NET

正如答案中所指出的那样,正在发生文件系统redirect。 我正在使用64位操作系统上的控制台应用程序的Visual Studio的默认设置开发应用程序。 我不确定在编译时必须保留哪些设置/开关,以便应用程序可以在32位和64位操作系统上运行。

基本上,它应该只是设置将文件复制到System32而不pipe它是什么位的操作系统。

在后面的程序中,我必须通过命令行访问psTools实用程序,如果将其放在SysWOW64中,命令行不可用。 如果我进行更改,要使用SysWOW64的32位cmd.exe,这将再次是64位平台特定的,我不想select。

任何解决scheme,可以使应用程序运行在32位和64位没有问题? 我是否必须修改代码(如何?)还是必须修改此控制台应用程序项目的某些属性(哪些属性)?

从控制台进程读取

VC ++ MFC在不久的将来会过时吗?

.NET Bitmap.Load方法在不同的计算机上产生不同的结果

validationWindows用户名/密码为具有pipe理权限

Windows如何决定是否触发MouseUp或Click?

你已经违反了文件系统重定向 。

因为%windir%system32专门用于64位应用程序,所以在64位版本的Windows上,尝试访问%windir%system32目录的32位应用程序会自动并透明地重定向到32位%windir%sysWOW64目录。

首先,确保你的程序确实属于64位系统文件夹 。 Windows做这个自动重定向的原因。 32位的东西不会在64位版本的Windows上的%windir%system32文件夹中

如果您确定要将东西复制到64位系统目录中,则有几个选项。 最简单的方法就是把你的工具编译成一个64位的应用程序。 或者,您可以通过使用%windir%sysnative而不是%windir%system32来告诉WOW64重定向程序您知道自己在做什么而不执行重定向。

我有同样的问题。 解决方案是在Visual Studio的项目属性中将“平台目标”设置为x64或Anycpu而不是x86。 在这种情况下,路径将是"C:Windowssystem32"并且不会重定向到"C:WindowsSysWOW64"您可以通过将任何文件放在“C: Windows SysWOW64”文件夹中,然后使用File.Exists命令检查是否在该文件夹中找到文件:

File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),sFileName));

要么

File.Exists(Path.Combine(Environment.SystemDirectory,sFileName));

我在我的32位应用程序中总是返回本机system32文件夹使用助手属性。 帮手属性是:

public static string NativeSystemPath { get { if (Environment.Is64BitOperatingSystem) { return System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Windows),"Sysnative"); } return Environment.GetFolderPath(Environment.SpecialFolder.System); } }

由于path environnement变量在Windows x86 / x64版本上都包含c:windows ,为什么不把工具放到c:windows : %windir% ?

在我的情况下,这解决了我的问题。

c# – 从System.Runtime.dll而不是从mscorlib获取对System.String的引用

c# – 从System.Runtime.dll而不是从mscorlib获取对System.String的引用

我有一个使用Assembly.ReflectionOnlyLoad的System.Runtime.dll的引用.
当我在其上调用.GetType(“System.String”)时,我在mscorlib中获取System.String类型,而不是System.Runtime中的那个,这将导致我出现问题,因为我将生成错误的IL.有没有其他方法可以做到这一点?

解决方法

你看到的是装配统一的结果.当您使用System.Reflection API发出程序集时,没有简单的方法可以避免将环境中的元数据(例如Type)引用泄漏到生成的程序集中.这是因为S.R Api用于运行时代码生成,而不是用于生成要保存的输出.

您可以尝试使用Mono.Cecil之类的东西,它更适合此目的.

C:WINDOWSsystem32configsystemprofileDesktop不可用怎么办

C:WINDOWSsystem32configsystemprofileDesktop不可用怎么办

最近有小伙伴在是使用电脑的时候电脑突然出现了这个提示如果该位置位于这台电脑上,请确保设备或驱动器已连接,或者光盘已插入,然后重试。如果该位置位于网络上,请确保你已连接到网络或Internet,然后重试。如果仍然找不到该位置,则它可能已移动或删除。这要怎么办呢?下面就和小编一起看看吧!

解决方法

Windows10开机Desktop(桌面)位置不可用的解决方法共有三种,具体如下:

第一种方法:重新启动Windows 资源管理器。

按下键盘上的Ctrl+Alt+Del组合键,进入系统注销界面,点击:任务管理器,在打开的任务管理器窗口中点击【文件】,在弹出的新建任务对话框中,输入:explorer,再点击复选 以系统管理权限创建此任务。最后点击:确定,重新启动资源管理器。

第二种方法:修改 User Shell Folders 中 Desktop字符串值的数值数据。

1、在【运行】对话框中输入:regedit 命令,点击确定或按下键盘上的回车键,打开注册表编辑器;

2、复制:HKEY_CURRENT_USERSoftwareMicrosoftwindowsCurrentVersionExplorerShell Folders 注册表路径到注册表编辑器的地址栏中;

3、粘贴完成后,我们按下键盘上的回车键,定位到Shell Folders,在对应的右侧窗口中找到并左键双击:Desktop;

4、在打开的编辑字符串对话框中,右键点击Desktop数值数据,在右键菜单中点击复制,将 C:UsersAdministratorDesktop 复制到记事本中;

5、再复制:HKEY_CURRENT_USERSoftwareMicrosoftwindowsCurrentVersionExplorerUser Shell Folders注册表路径到注册表地址栏中;

6、粘贴完成后,我们按下键盘上的回车键,定位到User Shell Folders,在对应的右侧窗口中找到并左键双击:Desktop;

7、复制 Desktop的数值数据 %USERPROFILE%Desktop备用;

8、然后,将 C:UsersAdministratorDesktop 复制数值数据栏内,点击:确定。

9、回到注册表编辑器窗口中,可以看到:

Desktop REG_EXFAND_SZ C:UsersAdministratorDesktop

点击窗口左上角的【文件】,在下拉菜单中点击【退出】,退出注册表编辑器。

重新启动计算机,问题应该得以解决。

第三种方法:复制系统盘中的【桌面】文件夹到 C:WINDOWSsystem32configsystemprofile文件夹里。

1、进入资源管理器,点击:系统C:盘 - 用户 - Administraor(本机使用的用户名),可以看到一个【桌面】文件夹;

2、右键点击桌面文件夹 - 复制;

3、打开:C:WINDOWSsystem32configsystemprofile 文件夹,右键点击空白处 - 粘贴;

4、【桌面】文件夹便粘贴到了systemprofile 文件夹里,退出系统盘,重启计算机,问题应该得以解决。

go LoadDLL 其依赖项不在 System 或 System32 中

go LoadDLL 其依赖项不在 System 或 System32 中

go loaddll 其依赖项不在 system 或 system32 中

php小编百草在这里为大家介绍一种常见的错误提示:“go LoadDLL 其依赖项不在 System 或 System32 中”。当我们在使用go语言编写程序时,有时会遇到这个错误提示,表示我们的程序在加载动态链接库时找不到依赖项所在的路径。这个问题可能会导致程序无法正常运行,因此我们需要解决这个问题才能继续进行开发工作。在本文中,我们将详细介绍如何解决这个错误,并提供一些常见的解决方法和技巧。

问题内容

我正在尝试从 windows 上的 go 加载库,如下所示:

citect, err := syscall.loaddll("c:\\program files (x86)\\aveva plant scada\\bin\\bin (x64)ctapi.dll")
登录后复制

问题是该库在该目录中也有依赖项。结果是错误“找不到指定的模块”。我很确定它失败是因为其他 dll 中未满足的依赖关系。

系统调用是否有某种方法可以强制 dll 搜索路径?

更新

我认为我遇到的问题是因为我指定了 load_library_search_user_dirs 但我尝试加载的库也需要标准搜索路径。我添加了 load_library_search_default_dirs,现在它给了我一个有意义的句柄。

func main() {
    fmt.Println("hello")
    dllPath := "C:\\Program Files (x86)\\AVEVA Plant SCADA\\Bin\\Bin (x64)"

    kernel, _ := windows.LoadDLL("kernel32.dll")
    defer kernel.Release()

    sdd, err := kernel.FindProc("SetDefaultDllDirectories")
    if err != nil {
        panic(err)
    }
    r1, _, err := sdd.Call(windows.LOAD_LIBRARY_SEARCH_SYSTEM32)
    if r1 == 0 {
        panic(err)
    }

    addd, err := kernel.FindProc("AddDllDirectory")
    if err != nil {
        panic(err)
    }
    chars := StringToWideCharPtr(dllPath)

    r1, _, err = addd.Call(uintptr(unsafe.Pointer(chars)))
    fmt.Printf("result of add dll directory: %d\n", r1)
    if r1 == 0 {
        panic(err)
    }

    h, err := windows.LoadLibraryEx("CtApi.dll", 0, 0)

    if err != nil {
        panic(err)
    }

    fmt.Printf("library: %v\n", h)

}
登录后复制

解决方法

尝试在golang.org/x/sys/windows包中使用loadlibraryex,它支持load_library_search_*标志(参见使用 load_library_search 标志的搜索顺序)。

package main

import (
    "golang.org/x/sys/windows"
)

func main() {
    name := "C:\\Program Files (x86)\\AVEVA Plant SCADA\\Bin\\Bin (x64)CtApi.dll"
    h, err := windows.LoadLibraryEx(name, 0, windows.LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)
    if err != nil {
        panic(err)
    }

    dll := &windows.DLL{
        Name:   name,
        Handle: h,
    }

    // use the dll
}
登录后复制

请注意,load_library_search_* 标志并非在所有 windows 版本上都可用。请参阅此处的代码注释。

以上就是go LoadDLL 其依赖项不在 System 或 System32 中的详细内容,更多请关注php中文网其它相关文章!

Innosetup 将文件安装到system32 、syswow64下

Innosetup 将文件安装到system32 、syswow64下

总结

以上是小编为你收集整理的Innosetup 将文件安装到system32 、syswow64下全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于文件被复制到SysWOW64而不是System32的讲解已经结束,谢谢您的阅读,如果想了解更多关于c# – 从System.Runtime.dll而不是从mscorlib获取对System.String的引用、C:WINDOWSsystem32configsystemprofileDesktop不可用怎么办、go LoadDLL 其依赖项不在 System 或 System32 中、Innosetup 将文件安装到system32 、syswow64下的相关知识,请在本站搜索。

本文标签: