2009-12-30 54 views
12

Bối cảnh:
Tôi đã nướng ổ cứng cũ của mình tại nơi làm việc và đang nhận một ổ cứng mới. Với điều đó tôi sẽ phải xây dựng lại máy tính của mình. Quản lý của tôi đã cài đặt Windows 7 trên máy tính xách tay cho mượn của anh ấy mà tôi đã sử dụng trong khi máy của tôi hết hạn. Nhưng tôi đã gặp rắc rối.Windows 7 .net Excel .SaveAs() Lỗi Ngoại lệ từ HRESULT: 0x800A03EC

Chúng tôi có số lượng ứng dụng công bằng sử dụng tham chiếu Microsoft.Office.Interop.Excel. Tôi đã vượt qua một vài lỗi cho đến nay nhưng một trong những tôi đã bị mắc kẹt trong vài ngày qua (máy của tôi thực sự bị thất bại ổ đĩa cứng sau khi xây dựng lại đầu tiên) và đã được unnable để tìm một sửa chữa. Tôi đã tìm kiếm lỗi này nhưng không thể tìm thấy bất kỳ ai gặp sự cố này trên Windows 7, mặc dù tôi đã thử các bản sửa lỗi khác cho Windows Server 2008 không có kết quả.

Nếu tôi không thể khắc phục vấn đề này, tôi sẽ không thể sử dụng Windows 7 và muốn biết rằng trước khi tôi xây dựng lại một máy chỉ để lau máy và bắt đầu lại (lần thứ ba).

Vấn đề:
Hệ điều hành: Windows 7 Enterprise
Thông báo lỗi: ngoại lệ từ HRESULT: 0x800A03EC
Code:

Private m_xls As Microsoft.Office.Interop.Excel.Application 
Private m_wkbk As Microsoft.Office.Interop.Excel.Workbook 
Private m_wksht As Microsoft.Office.Interop.Excel.Worksheet 
m_xls = New Application 
m_xls.Visible = False : m_xls.DisplayAlerts = False 
m_wkbk = m_xls.Workbooks.Open(Me.FilePath) 
m_wksht = CType(m_wkbk.ActiveSheet, Worksheet) 
'...Write some data...' 
m_wkbk.SaveAs(Me.FilePath, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value) 

Các lỗi xảy ra trên dòng cuối cùng.

Những gì tôi đã cố gắng cho đến nay:

  1. Thay đổi AppPool sử dụng tài khoản NetworkService (đó là 'ApplicationPoolIdentity' mà tôi không thể tìm thấy trong danh sách người dùng trong thiết lập bảo mật) . Sau đó, hãy cấp toàn quyền truy cập tài khoản NetworkService dịch vụ mạng vào thư mục thích hợp.
  2. Giving NetworkService quyền truy cập vào các thiết lập tất cả các 'Microsoft Excel Ứng dụng' trong DCOMCNFG
  3. Chạy lệnh này "APPCMD thiết lập cấu hình -section: -enableParentPaths asp: true" bởi vì nó chỉ là điều khác tôi có thể tìm
  4. Sử dụng. SaveCopyAs() đã hoạt động nhưng gây ra các lỗi khác nhau

Tôi chỉ muốn xem liệu có ai khác đã chạy vào điều này hay không vì Windows 7 là mới. Tôi có thể đi với Server 2008 nhưng tôi muốn có một số lý do vững chắc đằng sau nó trước khi tôi nói với quản lý của tôi nó sẽ không hoạt động.

Cảm ơn bạn, Jeff

+0

tôi sẽ khuyên bạn nên sử dụng http://download.cnet.com/Filemon/3000-2094_4-10020837.html. FileMon, có thể cho bạn biết những gì là goind vắt ở đây. ** SaveAs ** có vẻ như vấn đề về khóa hoặc xác thực. Nhà nước nếu bạn cần thêm thông tin ... –

+0

Liên kết này có giúp ích gì không? http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15 – shahkalpesh

+0

@shahkalpesh: Cảm ơn có, tôi đã xem xét điều đó trước đó nhưng nó không giải quyết được vấn đề của tôi. –

Trả lời

15

Lưu ý: Điều này cần được cô đặc một chút vì nó là một tập hợp tất cả các bản sửa lỗi tôi đã thực hiện trên wiki nội bộ của chúng tôi nhưng tôi không chắc chắn tập con của những thay đổi đã làm .

Giải pháp:

Những thay đổi sau đây có thể là một superset của làm thế nào để giải quyết vấn đề này.

-Run DCOMCNFG.exe và điều hướng đến 'Dịch vụ thành phần> Máy tính> Máy tính của tôi'.
-Nhấp chuột vào 'Máy tính của tôi' và nhấp vào 'Thuộc tính'.
-Mở tab 'Bảo mật COM'. Thêm tài khoản của bạn cho tất cả mọi người trong số các nút được liệt kê ('Chỉnh sửa Giới hạn ...' và 'Chỉnh sửa Mặc định ...' trong 'Quyền truy cập' & 'Khởi chạy và Kích hoạt Quyền'). Cung cấp cho tài khoản của bạn tất cả các tùy chọn truy cập. Nhấp vào 'Áp dụng' rồi 'OK'.
-Khi vẫn còn trong DCOMCNFG, mở rộng liên kết 'My Computer' và mở thư mục 'DCOM Config'.
-Nhấp chuột vào 'Ứng dụng Microsoft Excel' và chọn 'Thuộc tính'.
-Thanh thẻ 'Bảo mật' chọn tùy chọn 'Tùy chỉnh' cho 'Quyền khởi chạy và kích hoạt' và 'Quyền cấu hình'. Đối với cả hai nhấp vào nút 'Chỉnh sửa ...'. Cấp cho tài khoản của bạn quyền truy cập vào mọi thứ.
-Khi vẫn còn trong 'Thuộc tính' cho 'Ứng dụng Microsoft Excel', hãy chuyển đến tab 'Nhận dạng'.
-Chọn tùy chọn 'Người dùng tương tác'.
-Nhấp vào 'Áp dụng' rồi 'OK'.
-Khởi động lại máy tính của bạn.

-Cố dưới đây DCOMCNFG & thay đổi ApplicationPoolIdentity.

-Nhắc lệnh nhắc lệnh với tư cách Quản trị viên.
-Navigate vào c: \ Windows \ System32 \ inetsrv> và chạy 'APPCMD thiết lập cấu hình -section: -enableParentPaths asp: true'

Hoặc bạn có thể sử dụng .SaveCopyAs() mặc dù điều này có thể vẫn không giải quyết vấn đề và sẽ yêu cầu thay đổi mã.

DCOMCNFG Đối với windows 7:

Lỗi này xảy ra vào 'Excel ứng dụng = New Application();' gọi

Liên kết này chi tiết làm thế nào để sửa chữa các vấn đề đối với XP/Server 2003 nhưng có thể được điều chỉnh lên Windows 7: http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

tôi không có/không thể tìm thấy một tài khoản 'ASPNET'. Bạn phải kiểm tra hồ bơi ứng dụng để tìm hiểu ứng dụng đang chạy như thế nào.
Để thực hiện điều đó, hãy vào 'Quản lý máy tính> Dịch vụ và ứng dụng> Dịch vụ thông tin Internet> Hồ bơi ứng dụng'
Nhấp chuột phải vào AppPool thích hợp và chọn 'Cài đặt nâng cao'. Trong 'Process Model> Identity' bạn có thể tìm thấy tài khoản đang chạy. Tôi đã 'ApplicationPoolIdentity' mà tôi cũng không thể tìm thấy vì vậy tôi đã thay đổi nó thành 'Network Service' như Windows Server 2003.
Khi điều này được thiết lập chạy DCOMCNFG.exe. Điều hướng đến 'Dịch vụ thành phần> Máy tính> Máy tính của tôi> Cấu hình DCOM'.
Tìm và nhấp chuột phải vào 'Ứng dụng Microsoft Excel' và chọn 'Thuộc tính'. Chọn tab 'Bảo mật'. Trong 'Quyền khởi chạy và Kích hoạt', chọn 'Tùy chỉnh' và nhấp vào 'Chỉnh sửa'.
Sau đó nhấp vào nút 'Thêm ...'.
Nhập tên của tài khoản thích hợp, trong trường hợp này là 'Dịch vụ mạng' và nhấp vào 'Kiểm tra tên'. Sau đó bấm vào 'OK'.
Quay lại trang 'Khởi chạy và Kích hoạt Quyền' làm nổi bật tài khoản 'Dịch vụ Mạng' và chọn hộp kiểm 'Khởi chạy Địa phương' và 'Kích hoạt Cục bộ'. Sau đó bấm vào 'OK'.

+0

Bất kỳ ai cũng biết đây có phải là một số điều kỳ quặc của Win 7, hay Jeff chỉ có một số điều kiện cụ thể dẫn đến điều này? Tôi đang đấu tranh với một lỗi saveAs là tốt. – pc1oad1etter

+0

Tính đến hôm nay, đây vẫn là cách duy nhất tôi biết để giải quyết vấn đề này và phần còn lại của nhóm của tôi trên Server 2008 (cũng là Windows 6.1) cũng đang sử dụng nó để xử lý nó. Tôi rất muốn nghe có một cách tốt hơn. –

+8

Đối với Windows 7 64 bit, khởi động DCOMCNFG ở chế độ 32 bit bằng cách sử dụng: DCOMCNFG -32 Nếu không, bạn sẽ không thấy Ứng dụng Microsoft Excel trong danh sách. –

0

Hãy chắc chắn rằng bạn đang chạy chương trình (và Excel.exe) as administrator, và thư mục bạn đang tiết kiệm để không có "read-only" thuộc tính trên.

Ngoài ra, hãy thử chuyển đường dẫn tệp đầy đủ thay vì chỉ tên tệp.

Bạn cũng có thể thử chuyển System.Reflection.Missing.Value thay vì bỏ qua các tham số tùy chọn.

Không thể nghĩ ra bất kỳ điều gì khác ngay bây giờ. Hi vọng điêu nay co ich.

ShdNx

+0

Tài khoản của tôi là một quản trị viên trên máy và khi tôi chạy VS, nó chạy với tư cách quản trị viên. Tôi đã kiểm tra quá trình excel.exe và nó đang chạy như NetworkService mà tôi đã cho phép truy cập vào thư mục đó. Ngoài ra Me.FilePath là toàn bộ thư mục. Tôi đã thử Missing.Value nhưng có lỗi tương tự nên thật không may trong khi đó là tất cả những ý tưởng hay mà tôi vẫn bị mắc kẹt. Cảm ơn mặc dù! –

3

Khi tôi gặp lỗi này, tôi nghĩ mình đã bắt đầu sử dụng.SaveCopyAs thay vì SaveAs. Tôi không chắc chắn những lỗi nào khác đang gây ra cho bạn, nếu bạn có thể giải thích có lẽ điều gì đó có thể được tìm ra cho tình huống đó.

Ngoài ra, một điều bạn đang làm rất có thể khiến excel.exe vẫn còn trong bộ nhớ sau khi xử lý tệp. Đây là một bài viết cho thấy cách thích hợp để sử dụng và phát hành các đối tượng interop COM (http://support.microsoft.com/kb/317109). Đó là một nỗi đau, nhưng nó đã làm việc cho tôi trong việc cho phép những tài nguyên đó được phát hành trước khi ứng dụng đóng lại.

+0

Tôi cũng nên lưu ý rằng tôi đã gặp vấn đề với điều này trên Vista, và nó dường như liên quan đến việc có phiên bản Office mới hơn, chứ không phải phiên bản Windows (tôi có thể tạo lại trên máy XP, nhưng không phải trên một số phiên bản cũ của các hội đồng interop) –

+0

Rick, vấn đề của tôi với .SaveCopyAs có thể khắc phục được vì tôi có thể sửa đổi mã. Vấn đề của tôi với điều đó là tất nhiên đây không phải là nơi duy nhất chúng tôi sử dụng điều này vì vậy tôi liên tục phải được chaning mã vì vậy nếu đó là giải pháp duy nhất thì nó có lẽ không phải cái gì tôi muốn theo đuổi. Chúng tôi biết về việc phát hành excel.exe và cố gắng để phát hành nó (mặc dù một lần trong một thời gian tôi sẽ đi trên máy chủ và phải giết một số off). Vì vậy, tôi đồng ý trong khi đây không phải là phương pháp tốt nhất, nó sẽ là một cam kết chính để chúng tôi thay đổi nó ngay bây giờ và điều đó sẽ tùy thuộc vào người quản lý của tôi cho dù chúng tôi có tài nguyên hay không. –

+0

Chắc chắn, tôi chỉ muốn đưa nó lên bởi vì tôi tự mình gặp phải nó, và phải trải qua những khó khăn trong việc tìm ra những gì đang diễn ra. Tôi đã thử vài giờ để có được hàm SaveAs() hoạt động mà không có lỗi và không bao giờ tìm thấy bất kỳ kết hợp các thông số nào không bị lỗi. Nếu bạn không thể sử dụng SaveCopyAs(), tôi không chắc cách tiếp cận tốt nhất có thể là gì. Chúc bạn may mắn! –

0

Câu trả lời ở trên bởi Jeff Keslinke đã kết thúc với tôi. Bạn cũng cần xem xét hồ bơi ứng dụng mà Ứng dụng của bạn đang sử dụng và đảm bảo rằng danh tính là chính xác và có toàn quyền truy cập và đặc quyền.

0

Tôi gặp vấn đề tương tự và phát hiện thấy lỗi lỗi ứng dụng với mã Ngoại lệ: 0xc0000005 trong cửa sổ sự kiện. Tìm kiếm trên web và tìm giải pháp sau tại liên kết Excel 2010 Crash, Exception code: 0xc0000005 Đổi tên tệp mở rộng của tệp được mở từ xlsx thành zip. Giải pháp hoạt động cho trường hợp của tôi.

Các vấn đề liên quan