我正在使用Unity和Prism V4在.NET中進行模塊化應用程序。採用模塊化設計的一個優勢是可以輕鬆添加和刪除功能。這是我能夠創建添加或排除某些功能的應用程序的版本的要求。使用Prism和Unity,我可以通過加載程序集(.dll文件)來完成所需功能。我喜歡這個,因爲它可以讓我清楚準確地排除整個功能。加載模塊,安全和產品密鑰
我有某些功能,其中絕對不能包含在我們自己的責任的某些版本的應用程序中。我想阻止用戶能夠將其他用戶的.DLL文件複製到他的目錄中以獲得該功能。其他有類似擔憂的人可能有興趣銷售「插件模塊」作爲升級到其他產品並限制購買附加組件的用戶。這不完全是我們正在做的,但也不是完全排除。
現在,使用Prism和Unity可以通過多種方式註冊模塊目錄,包括代碼,目錄,應用程序配置XML文件,或者您可以編寫自己的模塊目錄。最簡單的方法之一是應用程序的shell引用每個程序集,代碼特別加載該配置的程序集文件。這確實會讓從別人那裏複製文件並獲得該功能稍微困難一些。但是,恐怕會導致配置錯誤的可能性,或者阻止更通用的「附加」方案(即,您需要重新編譯應用程序外殼以包含功能)。
如果我硬編碼要加載的程序集,我可能必須在編譯環境變量上使用#ifdef來確定應該加載哪些模塊。如果他們抓取shell可執行文件和附加庫,這並不能真正阻止某人複製文件。跟蹤具體構建以進入不同的安裝程序項目並防止購買的附加方案似乎也更加困難。對我而言,如果應用程序的shell不需要直接引用模塊,那看起來最好。也許,它可能會從特定位置加載程序集,但可能以某種方式驗證產品密鑰或其他位置,用戶應該有權訪問該模塊。
我很感興趣,如果任何人有經驗或見解如何許可模塊或限制對不同用戶(版本)的應用程序訪問模塊。基本應用程序可能完全免費且無需許可證。大概什麼都不是萬無一失,但我需要盡我所能讓別人繞過系統變得不容易。另一個要求是我不相信我可以要求我的用戶可以訪問互聯網(如果有某種許可方式需要這樣做)。當然,我不確定這不僅限於.NET,Prism或Unity的討論,但我正在使用這個項目。
使用強鍵名簽署每個程序集可以幫助我驗證模塊是否來自可信來源,但我不確定這對於授權有幫助。也許有一個產品密鑰系統可以用來指示哪些模塊被允許?無論如何,我會停下來,因爲我對任何解決這個問題的方法持開放態度,我不想把討論的焦點放在一個特定的想法或路徑上。
感謝您的幫助提前。
我不確定我們在這裏的同一頁上..我試圖避免加載整個模塊(庫),當用戶不應該有一個許可證。我不能從我的主項目中引用這個額外的庫來檢查每個類是否允許類型。我需要排除對其可能存在的任何提及。我開始認爲如果這個模塊在Module.Initialize上檢查了它自己的激活,它會更好。但是,對於作爲組許可的其他模塊,可能需要其他模塊。我將其標記爲有用,因爲它教會了我一些我不知道的新東西。 – Alan