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

Project1

 找回密码
 注册会员
搜索
查看: 5913|回复: 10
打印 上一主题 下一主题

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

[复制链接]

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
跳转到指定楼层
1
发表于 2013-9-21 23:12:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 流川枫 于 2013-9-21 23:17 编辑

將 C:\Windows\SysWOW64\dmusic.dll 禁止運行,從而禁止MIDI音樂被初始化和播放。
禁止方法是右鍵屬性安全裏設置為如圖:

但這個方法的缺點是所有應用程序都將無法播放MIDI的音樂,除非你有辦法只禁止RMVX的程序加載該DLL。
原帖:
http://kiyonatsusuzuka.blog.163. ... 152201382111645787/

评分

参与人数 1星屑 +120 收起 理由
fmy19960827 + 120

查看全部评分

在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
2
 楼主| 发表于 2013-9-21 23:33:47 | 只看该作者
順便問一下WIN8.1是否會有這個問題,如果沒有的話也許考慮升級WIN8.1

点评

WIN8沒有AERO特效,所以放棄升級WIN8了  发表于 2013-9-25 01:44
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
3
 楼主| 发表于 2013-9-21 23:46:44 | 只看该作者
千千靜聽就算禁止那個DLL後也可以播放MIDI,這是因為其不是使用DX的MIDI而是自己的
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

海 关

梦石
0
星屑
50
在线时间
431 小时
注册时间
2006-1-1
帖子
460
4
发表于 2013-9-24 14:28:55 | 只看该作者
困扰我的问题果然解决了,我记得以前win7下没有这个问题啊,难道是最近win7更新的吗

点评

不知道WIN8.1有沒有這個問題  发表于 2013-9-24 18:20
消失中~~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
5
 楼主| 发表于 2013-9-26 16:02:50 | 只看该作者
餓,我發現現在我的WIN7裏就算不禁用那個DLL,啟動RMVX的遊戲只用4秒。而這可能和我前幾天卸載了瑞星殺毒有關。看來導致WIN7下RMVX啟動無響應不是WIN7的BUG,而更可能是殺毒或其他原因導致的。

点评

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

评分

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

查看全部评分

在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

6
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
7
发表于 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也行 只是代码比较多
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
8
 楼主| 发表于 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
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
9
发表于 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
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
10
 楼主| 发表于 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
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-22 04:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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