Tommy 碎碎念
https://blog.teatime.com.tw/
Tommy Wu's blog
tommy
2024-03-19T16:48:06Z
-
Windows 8 無法正常移除 USB 硬碟?
https://blog.teatime.com.tw/1/post/428
<p>最近突然發現在 Windows 8 底下, 每次接上 USB 硬碟之後, 都沒辦法正常的移除. 每次要移除都說有程式在使用中, 不過用 unlocker 看又看不出有什麼程式在使用中. </p><p>記得剛裝好 Windows 8 的時候, 並沒有這個問題啊? 應該與我後來安裝或執行的程式有關吧.</p><p>一個個把目前執行的程式關閉試看看, 終於發現把 TaskMgr.exe 關閉之後就可以正常把 USB 硬碟給移除了. 我想應該是一個 bug 吧. </p>
Windows 8
2012-09-30T15:05:34Z
tommy
-
Visual Studio 2012 在 Windows 8 底下無法使用 Shell32.Shell 的問題?
https://blog.teatime.com.tw/1/post/427
<p>最近開始用 C# 寫 .Net 的程式, 發現就寫程式的方便性來說, 比起直接用 C/C++ 寫要方便許多. 所以... 原本有些為了方便, 使用 php 來寫的 script, 也都順便改用 C# 來寫.</p><p>因為 Windows 8 與 Visual Studio 2012 出來後, 就由 MSDN 中抓回來用, 其實算很好用. 不過... 碰到一個原本在 Windows 7 搭配 Visual Studio 2010 時可以正常運作的程式, 改用 Windows 8 搭配 Visual Studio 2012 就會出現錯誤.</p><p>出錯的地方很簡單, 就類似這樣:</p><pre class="csharp"><div class="insertcode"><pre class="csharp" style="font-family: monospace"><span class="kw1">namespace</span> Shell32Test<br /><span class="br0">{</span><br /> <span class="kw4">class</span> Program<br /> <span class="br0">{</span><br /> <span class="kw1">static</span> <span class="kw1">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span><br /> <span class="br0">{</span><br /> <span class="kw4">object</span> shell <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> Shell32.<span class="me1">Shell</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br /> <span class="br0">}</span><br /> <span class="br0">}</span><br /><span class="br0">}</span></pre></div></pre><p>會出現下面的錯誤:</p><pre class="csharp"><div class="insertcode"><pre class="csharp" style="font-family: monospace">Unable to cast COM <span class="kw4">object</span> of type <span class="st0">'System.__ComObject'</span> to <span class="kw4">interface</span> type <span class="st0">'Shell32.Shell'</span>. <span class="kw1">This</span> operation failed because the QueryInterface call on the COM component <span class="kw1">for</span> the <span class="kw4">interface</span> with IID <span class="st0">'{286E6F1B-7113-4355-9562-96B7E9D64C54}'</span> failed due to the following error<span class="sy0">:</span> No such <span class="kw4">interface</span> supported <span class="br0">(</span>Exception from HRESULT<span class="sy0">:</span> 0x80004002 <span class="br0">(</span>E_NOINTERFACE<span class="br0">)</span><span class="br0">)</span>.</pre></div></pre><p>不過, 同一個程式, 在 Windows 7 下, 不管用 Visual Studio 2010 或 2012 都可以運作. 而且, 把那個可以運作的執行檔, 複製到 Windows 8 也一樣可以正常運作.</p><p>後來, 發現在 Windows 8 底下用 Visual Studio 2012 寫 Windows Form 的程式時, 也可以正常運作. 似乎只有在 console 程式會無法運作.</p><p>比較一下兩者的程式碼, 發現 Windows Form 的程式會在 Main 前面加上<span class="pln">一行:</span></p><pre class="csharp"><div class="insertcode"><pre class="csharp" style="font-family: monospace"><span class="br0">[</span>STAThread<span class="br0">]</span></pre></div></pre><p>試著加上變成:</p><pre class="csharp"><div class="insertcode"><pre class="csharp" style="font-family: monospace"><span class="kw1">namespace</span> Shell32Test<br /><span class="br0">{<br /> [STAThread]<br /></span> <span class="kw4">class</span> Program<br /> <span class="br0">{</span><br /> <span class="kw1">static</span> <span class="kw1">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span><br /> <span class="br0">{</span><br /> <span class="kw4">object</span> shell <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> Shell32.<span class="me1">Shell</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br /> <span class="br0">}</span><br /> <span class="br0">}</span><br /><span class="br0">}</span></pre></div></pre><p>這樣子居然可以正常執行了. 真是個奇怪的 bug. </p>
程式設計
C#
VS2012
Windows 8
.Net
2012-09-19T17:32:58Z
tommy