1. 程式人生 > >Linux 執行Proteowizard中msconvert方法摸索---wine win32 win64架構的應用

Linux 執行Proteowizard中msconvert方法摸索---wine win32 win64架構的應用

質譜分析生成的原始檔案vendor,多數以.raw(特別是Thermo fisher)為主,作為standand format。作為一種質譜分析的收費壟斷手段。

作為民間的屌絲格式,mzxml以其免費轉化為使用者廣泛使用。

.raw到mzxml格式成為了逃脫收費的必通之路。

windows下實現msconvert並不難實現,可是巧了,手邊沒有windows成為了我的致命傷。

於是用了一個週末的時間,重新抄起了自己的wine。

直接進入正題,wine執行Proteowizard並不難,因為有linux版本,連結略,可以自行查閱。

難的是,一般linux預設都是x64架構,而x64一直詬病於對Framework的支援。

然而執行MSConvert(msconvet的GUI )又必須至少Dotnet452以上。Windows proteowizard的安裝包安裝需要執行dotnet35。 但是winetricks有個bug,那就是dotnet35無法正確,因為其和必須安裝的dotnet20相沖突。。。

好吧現在來講下我的解決方案:

首先新建win32架構的wine

export WINEARCH=win32
export WINEPREFIX=./wine32
wineboot -u

新建好後,使用wine-mono進行安裝軟體(注意不要著急安裝dotnet,因為wine預設在安裝dotnet時解除安裝mono)

env WINEPREFIX=~/.wine32 wine msiexec /i direction_of_mono.msi

安裝好後安裝必要的vcrun (記得不要忘記安裝vcrun2015)

env WINEPREFIX=~/.wine32 winetricks vcrun2003 vcrun2005 vcrun2008 vcrun2010 vcrun2012 vcrun2013 vcrun2015

最後安裝dotnet,注意一定要直接安裝dotnet46,因為不然會發生各種bug,(不要問我怎麼知道的。。。)

env WINEPREFIX=~/.wine32 winetricks dotnet46

好了,之後就可以執行msconvert

env WINEPREFIX=~/.wine32 wine msconvert.exe *.RAW

遺憾的是,最終還是會出錯,不過我覺得已經無盡接近正確答案了。希望有大神能給個更好的答案。

[email protected]:~/Software/PWID$ wine msconvert.exe QZH.raw
0012:fixme:wer:WerSetFlags (2) stub!
0012:fixme:heap:RtlSetHeapInformation (nil) 1 (nil) 0 stub
0009:fixme:ntdll:EtwEventRegister ({5eec90ab-c022-44b2-a5dd-fd716a222a15}, 0x3e27f0, 0x3f0030, 0x3f0048) stub.
0009:fixme:ntdll:EtwEventSetInformation (deadbeef, 2, 0x3e2560, 43) stub
0009:fixme:ntdll:EtwEventRegister ({319dc449-ada5-50f7-428e-957db6791668}, 0x13f1925, 0x143dbd0, 0x143dbe8) stub.
0009:fixme:ntdll:EtwEventSetInformation (deadbeef, 2, 0x13d2f3d, 28) stub
0009:fixme:ntdll:EtwEventRegister ({319dc449-ada5-50f7-428e-957db6791668}, 0x16175a8, 0x1a96470, 0x1a96488) stub.
0009:fixme:ntdll:EtwEventSetInformation (deadbeef, 2, 0x1588861, 28) stub
0009:fixme:kernelbase:QuirkIsEnabled3 (0x32f4b0, 0xffffffff) stub!
0009:fixme:process:GetNumaHighestNodeNumber (0x32fbe8): semi-stub
0009:fixme:thread:SetThreadStackGuarantee (0x32fbcc): stub
0009:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 4 0x1b89fc 0x32d07c 0x32d6e8 (nil)
0009:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 3 0x1b89e8 0x32d26c 0x32d8d8 (nil)
0009:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 3 0x1b89e8 0x32d26c 0x32d8d8 (nil)
0034:fixme:ole:CoGetApartmentType (0x414fb58, 0x414fb54): semi-stub
format: mzML 
    m/z: Compression-None, 64-bit
    intensity: Compression-None, 32-bit
    rt: Compression-None, 64-bit
ByteOrder_LittleEndian
 indexed="true"
outputPath: .
extension: .mzML
contactFilename: 

spectrum list filters:
  
chromatogram list filters:
  
filenames:
  QZH.raw
  
processing file: QZH.raw
0035:err:ole:marshal_object Failed to create an IRpcStubBuffer from IPSFactory for {00000126-0000-0000-c000-000000000046} with error 0x80004002
0009:err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002
0035:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
writing output file: .\QZH.mzML
0037:fixme:ver:GetCurrentPackageId (0x635fe8c (nil)): stub
0038:fixme:ver:GetCurrentPackageId (0x646fe8c (nil)): stub
0009:fixme:sync:SetWaitableTimerEx (0x284, 0x32e994, 0, (nil), (nil), (nil), 32) semi-stub
0037:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
0037:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
0039:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
0039:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003e:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
003e:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
0038:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
0038:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003a:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
003a:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003b:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
003b:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003c:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
003c:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003d:err:ole:ClientRpcChannelBuffer_SendReceive called from wrong apartment, should have been 0x80000cafe
003d:err:ole:xCall RpcChannelBuffer SendReceive failed, 8001010e
003e:fixme:ole:CoGetApartmentType (0xd36e648, 0xd36e644): semi-stub
003d:fixme:ole:CoGetApartmentType (0xd25e648, 0xd25e644): semi-stub
0038:fixme:ole:CoGetApartmentType (0x646e648, 0x646e644): semi-stub
0037:fixme:ole:CoGetApartmentType (0x635e648, 0x635e644): semi-stub
0039:fixme:ole:CoGetApartmentType (0x657e648, 0x657e644): semi-stub
003a:fixme:ole:CoGetApartmentType (0x668e648, 0x668e644): semi-stub
003b:fixme:nls:get_dummy_preferred_ui_language (0x8 0xd03e0f8 (nil) 0xd03e0f4) returning a dummy value (current locale)
003b:fixme:nls:get_dummy_preferred_ui_language (0x8 0xd03e0f8 0x57f8cb0 0xd03e0f4) returning a dummy value (current locale)
003b:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 2 0x1f1060 0xd03c39c 0xd03ca08 (nil)
003b:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 2 0x1f1060 0xd03c58c 0xd03cbf8 (nil)
003b:fixme:combase:RoGetParameterizedTypeInstanceIID stub: 2 0x1f1060 0xd03c58c 0xd03cbf8 (nil)
003b:fixme:ntdll:EtwEventRegister ({8e9f5090-2d75-4d03-8a81-e5afbf85daf1}, 0x48502fe, (nil), 0x1fc5384) stub.
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
[SpectrumWorkerThreads::work] error in thread: COM error: Unknown error 0x8001010E
^C003f:fixme:console:CONSOLE_DefaultHandler Terminating process 8 on event 0
003f:fixme:ntdll:EtwEventUnregister (deadbeef) stub.
003f:fixme:ntdll:EtwEventUnregister (deadbeef) stub.
003f:fixme:ntdll:EtwEventUnregister (deadbeef) stub.

祝大家實驗順利,生活圓滿!