设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

WIN7下運行RMVX遊戲開頭無響應十多秒的解決辦法

查看数: 5877 | 评论数: 10 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-9-21 23:12

正文摘要:

本帖最后由 流川枫 于 2013-9-21 23:17 编辑 將 C:\Windows\SysWOW64\dmusic.dll 禁止運行,從而禁止MIDI音樂被初始化和播放。 禁止方法是右鍵屬性安全裏設置為如圖: 但這個方法的缺點是所有應用程序都將無法 ...

回复

不死鸟之翼 发表于 2013-10-10 23:49:16
流川枫 发表于 2013-10-8 08:36
還有一招不需要補丁就可以實現,就是弄一個低級帳戶只禁止該帳戶運行那個DLL,然後RMVX的EXE創建快捷方式 ...

Windows 7的凭据管理器似乎可以保存账户的密码信息作为登录凭据,不过我没用过……我觉得最干净彻底的办法就是Hack一下自带的RGSS Player,以此为基础做出的游戏就都不会加载MIDI
流川枫 发表于 2013-10-8 08:36:10
不死鸟之翼 发表于 2013-10-7 10:55
其实我们忽略了一个问题,DirectX其实是以COM组件的形式提供的,dmusic的加载肯定不在程序内,HOOK这里显 ...

還有一招不需要補丁就可以實現,就是弄一個低級帳戶只禁止該帳戶運行那個DLL,然後RMVX的EXE創建快捷方式以那個帳戶運行該EXE,這樣就不會影響其他的使用DX播放MIDI的程序了

点评

用runas命令可以始終使用其他用戶運行  发表于 2013-10-8 09:12
試了下有個問題就是WIN7下貌似不能始終使用其他用戶身份運行,每次都要重新輸入帳戶密碼很麻煩。。  发表于 2013-10-8 08:45
不死鸟之翼 发表于 2013-10-7 10:55:54
本帖最后由 不死鸟之翼 于 2013-10-7 11:06 编辑
流川枫 发表于 2013-10-7 04:48
第一个方法没用无论如何都会加载系统的,所以1L里只好直接禁止运行该DLL。 第二个方法早就试过了,在OD都 ...

其实我们忽略了一个问题,DirectX其实是以COM组件的形式提供的,dmusic的加载肯定不在程序内,HOOK这里显然没用{:2_263:}OD抓不到也正常
所以禁止相关组件的初始化理论上可以达到防止卡死的目的
如果你有Dx9的SDK的话可以试试挂接一下CoCreateInstance和/或与之相关的API判断第一个参数CLSID是不是CLSID_DirectMusic***(具体是哪个我不敢肯定),如果是的话禁止初始化应该就没问题了
我这里只有系统引导后第一次启动游戏会卡,所以其实也没什么影响。
PS:唉我第一天来6R就这么作死233

点评

原来如此,不过已经完美解决了。卸载瑞星杀毒就是完美的既能播放MIDI最多也只等4秒  发表于 2013-10-7 11:08
流川枫 发表于 2013-10-7 04:48:25
不死鸟之翼 发表于 2013-10-6 20:55
我这里是第一次运行时会卡一阵子,鼠标无响应,整个屏幕停止重绘,之后就好了

如果楼主是每次都 ...

第一个方法没用无论如何都会加载系统的,所以1L里只好直接禁止运行该DLL。 第二个方法早就试过了,在OD都无法断点到加载该DLL,应该说其根本不是用LoadLibraryW和LoadLibraryA也不是用LoadLibraryExW和LoadLibraryExA加載該DLL的。其的加載方式不詳。  並且導致這個無響應問題的原因是因為瑞星殺毒v16,我剛又裝了一遍瑞星殺毒v16後發現又出現MIDI無響應的問題了需等待18秒。而卸載瑞星殺毒後只用4秒。

点评

Windows 6.1.7601@DirectX11,防病毒软件MSE,我这里一直10秒左右  发表于 2013-10-7 11:08
不死鸟之翼 发表于 2013-10-6 20:55:08
我这里是第一次运行时会卡一阵子,鼠标无响应,整个屏幕停止重绘,之后就好了{:2_270:}

如果楼主是每次都这样的话,可以试试两个方法
1 放一个假的dmusic.dll到游戏目录下,因为Windows的DLL加载顺序问题不知道能不能骗过去
2 如果每次启动都会卡,楼主会编程的话自己写一个Loader,阻止RM程序加载dmusic.dll即可

具体实现的话,方便起见可以用微软的Detours库。
启动游戏进程的时候使用DetourCreateProcessWithDllEx,使用方法和CreateProcess差不多,多出的两个参数,第一个填写你写的DLL名称,第二个给NULL即可
DLL方面,在DllMain里面进行API HOOK即可
过程类似这样,以C++为例
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(LPVOID&)Old_LoadLibraryW,New_LoadLibraryW);
DetourTransactionCommit();//一定要commit才能生效
至于拦截的处理
HMODULE (WINAPI* Old_LoadLibraryW)(LPCWSTR lpLibFileName)=LoadLibraryW;
HMODULE WINAPI New_LoadLibraryW(LPCWSTR lpLibFileName)
{
        if(wcscmp(lpLibFileName,L"dmusic.dll")==0)//如果加载的是dmusic.dll
        {
                return NULL;//直接让函数失败
        }
        return Old_LoadLibraryW(lpLibFileName);//不是的话正常加载
}
这样就可以屏蔽RM对这个DLL的加载,其他应用不受影响。
好吧我承认我很懒,随手写的没有测试 有兴趣的可以做出来 Detours可以从微软官网下载,需要自己编译一下,挺方便的,或者你自己写API HOOK也行 只是代码比较多
精灵使者 发表于 2013-9-26 16:42:17
其实XP的DXAUDIO是硬解码,WIN7是软解码,难怪会变慢了。

点评

我剛又裝了一遍瑞星殺毒v16後發現又出現MIDI無響應的問題了需等待18秒。而卸載瑞星殺毒後只用4秒。  发表于 2013-10-7 04:51
应该是使用了新的解码器有关。  发表于 2013-9-27 20:51
不過也有可能是最近我還裝了新的解碼器,就是MyMPC和最新版的PotPlayer  发表于 2013-9-26 17:11
不過奇怪的是現在我就算不禁用DX一樣很快,只用4秒,和XP時一樣了。 所以應該是別原因,現在極度懷疑是殺毒。  发表于 2013-9-26 17:09
流川枫 发表于 2013-9-26 16:02:50
餓,我發現現在我的WIN7裏就算不禁用那個DLL,啟動RMVX的遊戲只用4秒。而這可能和我前幾天卸載了瑞星殺毒有關。看來導致WIN7下RMVX啟動無響應不是WIN7的BUG,而更可能是殺毒或其他原因導致的。

点评

這就是命運石之門的選擇  发表于 2013-10-8 20:14

评分

参与人数 1星屑 +8 收起 理由
化螺耕 + 8 我很赞同

查看全部评分

两只鱼 发表于 2013-9-24 14:28:55
困扰我的问题果然解决了,我记得以前win7下没有这个问题啊,难道是最近win7更新的吗

点评

不知道WIN8.1有沒有這個問題  发表于 2013-9-24 18:20
流川枫 发表于 2013-9-21 23:46:44
千千靜聽就算禁止那個DLL後也可以播放MIDI,這是因為其不是使用DX的MIDI而是自己的
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-5 21:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表