programing

C#을 사용하여 Office-vba-macros에 디지털 서명 적용

telecom 2023. 8. 13. 09:32
반응형

C#을 사용하여 Office-vba-macros에 디지털 서명 적용

인터넷에서 한동안 검색했지만 성공하지 못한 후에 여기에 묻겠습니다.

인터넷의 일부 게시물에서는 엑셀 애플리케이션 내의 VBA-Macro에 디지털 서명을 적용할 수 없다고 합니다.하지만 제가 발견한 모든 기사들은 꽤 오래된 것들이기 때문에 저는 이제 코드로 이것을 하는 것이 가능하기를 바랍니다.

제 목표는 엑셀 문서를 열고 매크로가 존재한다고 가정했을 때 vba-macros에 디지털 서명을 적용하는 것입니다.

Excel 문서에 VBMacross가 있는지 탐지하기 위해 다음 코드가 있습니다.

string filePath = @"E:\OfficeDocuments\Sample1.xlsm";
object isReadonly = true;
object missing = Missing.Value;
_Application application = new Microsoft.Office.Interop.Excel.Application();
workbook = application.Workbooks.Open(
                    filePath, missing, isReadonly, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing,
                    missing, missing, missing);
bool workbookHasVbProject = workbook.HasVBProject;

그것은 잘 작동합니다.

이제 매크로에 서명하는 데 사용할 인증서를 가져옵니다.

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection x509Certificate2Collection = store.Certificates;
X509Certificate2Collection certificate2Collection = x509Certificate2Collection.Find(X509FindType.FindBySubjectName, "MyCertificate 01", true);
if (certificate2Collection.Count > 0)
{
   X509Certificate2 certificate = certificate2Collection[0];
}

그리고 이제 어떻게 계속해야 할지 모르겠습니다.

시도해 봤습니다.

VBE vbe = application.VBE;
VBProject vbProject = vbe.VBProjects.Item(1);

하지만 매크로에 서명할 기회가 없습니다.

c#-code로 매크로에 서명할 방법이 정말 없나요?

C#은 아니지만 MS 명령줄 도구로 엑셀 파일에 VBA 코드를 서명하는 방법이 있습니다.C# 프로그램에서 관련 명령을 호출합니다.해결된 질문:타임스탬프를 포함한 Excel VBA 프로젝트를 계약할 수 있습니까?

VBA 매크로에 서명하려면 도구 메뉴에서 수동으로 서명하고 디지털 서명을 선택하거나 VBA 코드에서 다음과 같은 방법을 사용할 수 있습니다.모듈을 만들고 추가합니다.

하위 서명Macros() Dim VBComp As VBComp 구성 요소 세트 VBComp = 이 워크북.VBP 프로젝트.VB 구성 요소("Module1") VB Comp."사용자 이름", "사용자 인증서" 종료 하위 항목에 서명

Module1을 서명할 모듈의 이름으로 변경하고, 귀하의 이름과 귀하의 인증서로 변경합니다.

언급URL : https://stackoverflow.com/questions/53205207/apply-digital-signature-to-office-vba-macros-with-c-sharp

반응형