2011-08-19 5 views
15

MS Excel을 실행해야하는 응용 프로그램이 있습니다. 그렇지 않으면 응용 프로그램이 중단됩니다. 따라서 Excel이 사용자의 컴퓨터에 설치되어 있지 않은 경우 사용자를 확인하고 경고하고 싶습니다.PC에 MS Excel이 있는지 프로그래밍 방식으로 확인하는 방법?

어떻게하면됩니까?

+0

훨씬 간단한 방법은 레지스트리를 확인하는 것입니다. 읽기 http://stackoverflow.com/questions/244517/where-is-a-reliable-registry-key-to-find-install-location-of-excel-2007 – Zenwalker

+0

좀 더 자세히 알려주십시오. "it 충돌? " 어쩌면 우리가 당신의 사용/필요성을 이해할 수 있도록 충돌이 일어나는 영역에 관련 코드를 포함시킬 수 있습니까? – ckittel

+0

Excel이 설치되지 않았으므로 오류가 발생했습니다. 오류는 다음과 같습니다. "CLSID가 {00024500-0000-C000-0000000000046} 인 COM 팩토리 검색 중 다음 오류로 인해 실패했습니다. 80040154 클래스가 등록되지 않았습니다 (HRESULT 예외 : 0x80040154 (REGDB_E_CLASSNOTREG)). "try catch는 아래에서 언급했듯이이 경우 훌륭한 작업을 수행하지만, 코드를 좀 더"대상 지정 "으로 지정하고 Excel의 존재를 검색하려고합니다. . 여기에 필요한 것은 현재의 프로젝트에서 ms 엑셀이 필요하고 form1을 열려고하지 않는다는 것을 사용자에게 경고하는 것이다. – Karapapas

답변

32
Type officeType = Type.GetTypeFromProgID("Excel.Application"); 
if (officeType == null) 
{ 
    //no Excel installed 
} 
else 
{ 
    //Excel installed 
} 
2

빠른 수정으로 예외를 catch하고 적절한 오류 처리를 구현할 수 있습니다. 그런 다음 사용자에게이를 알릴 수 있습니다.

2

이 블로그 게시물은 verify if Excel is installed via the registry (VB.NET 코드이지만 쉽게 C#으로 변환 할 수 있음) 방법을 설명합니다. 기본적으로 HKEY_CLASSES_ROOT\Excel.Application\CurVer 키를 통해 확인하게됩니다.

3
const string ASSEMBLY2003 = "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"; 

static bool IsAssemblyInstalled(string assembly) 
{ 
    try 
    { 
     s_assemblyExcel = Assembly.Load(assembly); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

이것은 단지도

RegistryKey key = Registry.ClassesRoot; 
RegistryKey excelKey = key.OpenSubKey("Excel.Application"); 
bool excelInstalled = excelKey == null ? false : true; 
+1

조립품을 로딩했기 때문에 조립품을 적재하는 것이 매우 비효율적이기 때문에 (조립품을 자체 appdomain에서 수행하지 않고 언로드 할 수 없음) – Larry

2

이것은 특정 질문에 대답하지 않는 모든 버전

과는 같이 할 수 있습니다 위해 그것을 할, 트릭을 할 것입니다,하지만 대체 방향에서 태클하지 않습니다 ...

필요가 MS Excel이 설치되어 있거나 컴퓨터가 단순히 을 표시 할 수 있어야합니까? 예를 들어, 사용자가 LibreOffice 또는 다른 유사한 Excel 파일 호환 응용 프로그램을 설치 한 경우이를 수용 할 수 있습니까?

사용자를위한 Excel 파일 및 PDF 파일을 여는 응용 프로그램이 있습니다. Google은 사용자가 컴퓨터에서 어떤 파일을 보았는지 소프트웨어에 신경 쓰지 않습니다. 그것은 우리의 관심사가 아닙니다. 간단히 파일 Process.Start(...)을 사용하고 OS에서 파일을 가져옵니다.

Try/Catch 블록으로 전화를 걸고이 전화가 오류가 발생하면 사용자에게 제안합니다. Office (Excel)가 설치되어 있지 않거나 PDF 뷰어가 누락 된 것과 같은 제안 사항이 있습니다. 기본적으로 사용자의 컴퓨터가 작업을 수행하기에 충분한 상태에 있는지를 적극적으로 확인하는 대신, 그것이 있다고 가정하지만, 일단 발견하지 못하면 상황을 처리합니다.

+0

내 응용 프로그램에서 많은 경우를 처리 할 수있는 좋은 방법이며 내 메도 즈의 절반이지만 워크 시트를 작성하기 위해 interop을 사용하고 ms 사무실을 필요로하는 불행한 방법이 있습니다. 나는 libre와 오픈 오피스와 함께 이것을 할 수있는 방법이 있어야한다는 것을 알고있다. 그러나 이것은 다른 .dll 다른 파일 포맷과 일반적으로 완전히 다른 aproach를 필요로한다. 그러나 내 미래의 계획에 열려 있거나 무료 사무실이있는 사람들에게 내 앱을 제공 할 계획입니다 – Karapapas

+0

@chris 실제로 네이티브 라이브러리/apis에 대한 interop을 수행하려는 경우 내 제안은 광범위한 것입니다. 마크. 당신이 언급했듯이, 내 제안은 실제로 이러한 파일을 표시하지 않을 때만 작동합니다. – ckittel

관련 문제