2011-11-15 185 views
2

我創建了一個應用程序,運行在32位操作系統的罰款,但我試過的每個64位操作系統似乎並沒有工作。32位應用程序的64位操作系統

我正在創建一個應用程序,允許您在Windows 7中更改登錄屏幕的背景圖像。要實現此目的,我的應用程序需要在System32目錄中創建一個文件夾,而在64位操作系統上它不會似乎想要創造它。我沒有收到錯誤,也沒有拋出異常。它似乎並沒有創建文件夾。

64位操作系統有一個不同的System32文件夾'Windows \ SysWOW64 \',所以我應該寫信給它?我對64位操作系統正在做什麼感到有點困惑,如果有人能夠清除它並指向正確的方向,那將是非常棒的。

在此先感謝!

代碼製作目錄:

path = DriveLabel += @"Windows\System32\Oobe\info\backgrounds\"; 

if (!Directory.Exists(path)) 
{ 
    Directory.CreateDirectory(path); 
} 
+0

您確定您的應用程序運行時具有適當的權限嗎? System32將成爲一個受保護的目錄。 – Tejs

+0

你能告訴我們你使用的代碼嗎? –

+0

是的,我在管理員帳戶上運行。在程序開始時,我檢查用戶是否是管理員。 – Milkboat

回答

1

現在已經提供了David Heffernan's 2nd update更多詳細信息是正確的解決方案。我會在這裏爲其他人找到這個類似問題的人提供答案,但他的建議是你需要爲這個案例做的事情。


原來的答案:

在64位Windows操作系統的system32文件夾下只適用於64倍的DLL和可執行文件,該SYSWOW64是32個版本。這樣做是爲了讓程序不會中斷,期望獲得32位dll,並最終獲得64位dll。 Windows檢測到32位程序正在嘗試寫入或讀取到System32文件夾並將其重定向到新文件夾。繼續使用它,請注意,如果有人在瀏覽器中導航,他們需要進入SysWOW64文件夾來訪問您的文件。 Here is a MSDN page正着手在64位窗口上寫入32位應用程序。要看的關鍵部分是File System RedirectorRegistry Redirector

還有一些其他自動重定向的文件和註冊表項,你應該知道如果你正在使用現代操作系統。這些情況的發生是因爲人們在假設他們擁有管理員權限的情況下編寫應用程序已經很長時間了,微軟並不想在打破鞭撻時使用vista和win 7的帳戶權限來打破所有問題。See this blog post.

此外,赫弗南的觀點。我會把錢寫在任何你想寫入System32文件夾的東西不應該去那裏。請詳細解釋一下你想用這個文件夾做什麼?如果你只是想機的本地數據,你應該使用Environment.GetFolderPath

string pathToMyDataFolder = Environment.GetFolderPath(Path.Combine(Environment.SpecialFolder.CommonApplicationData, MyAppFolderName)); 
+0

但按原樣使用該程序不起作用。它不會在目錄中創建文件夾。我應該檢查操作系統是否是64位,然後寫入SysWOW64文件夾? – Milkboat

+0

不!閱讀有關文件系統重定向器的信息。 system32的32位進程訪問被重定向到SysWOW64。 –

2

在64位操作系統的system32目錄中的64個進程和Syswow64資料目錄是32個進程。再次閱讀這個句子,因爲它是相反的直覺!

File System Redirector確保嘗試訪問system32的進程被重定向到相應的目錄。

如果您的進程是32位,那麼當它寫入到system32時,重定向器將導致在SysWOW64下創建文件/目錄。

更新1顯然UAC被禁用。在這種情況下,從32位進程寫入system32將在SysWOW64下產生輸出。而不是檢查UAC是否被禁用,您應該將requireAdministrator選項添加到清單中。

更新2在評論中您聲明您要更改登錄屏幕的背景。爲了做到這一點,您需要使用本機64位目錄,因爲Explorer是64位操作系統上的64位進程。你有很多選擇來實現這個目標:

  1. 目標AnyCPU,以便在64位操作系統下運行64位進程。這是最簡單的方法。
  2. 如果您發現自己在64位操作系統上運行,請寫入\ Windows \ sysnative。這是一個32位進程的偷偷摸摸的方式來命名不可說的64位system32文件夾。
  3. 禁用文件系統重定向器(不是真的推薦)。
+0

Windows 7在我測試過的所有機器上。我還檢查了UAC是否被禁用。 – Milkboat

+0

我不得不問,你爲什麼要在system32中創建文件夾。這違背了所有已知的合理實踐準則。 –

+0

我正在創建一個應用程序,允許您在Windows 7中更改登錄屏幕的背景圖像。爲此,您需要創建特定的目錄並將圖像移動到那裏。 – Milkboat

相關問題